2004-10-01  Alexander Chernov  <cher@ispras.ru>

	* revinfo.c: <ctype.h> is included;
	(struct verdb) new field `time' is added to store the release time;
	(add_verdb) new parameter `rtime' is added to fill up the new
	  `time' field;
	(read_verdb) the new format of the version database (with added release
	  date) is supported;
	(write_verdb) the new format of the version database is used to write
	  the database. The new format of the release database includes the
	  release date.
	(main) use of `add_verdb' is updated.

	* TODO: *** empty log message ***

	* prepare.c:
	(set_defaults) is the value of the <root_dir> element of the
	  ejudge.xml configuration file is set, this value is used as the
	  default value for the `root_dir' global configuration variable.

2004-09-30  Alexander Chernov  <cher@ispras.ru>

	* TODO: *** empty log message ***

2004-09-29  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* userlist_cfg.h:
	(struct userlist_cfg) new fields added: `var_dir', `super_serve_log',
	  `compile_log'.

	* userlist_cfg.c: include of <reuse/osdeps.h> is added;
	include of <limits.h> is added;
	new configuration file elements: <var_dir>, <super_serve_log>,
	  <compile_log>;
	(tree_alloc_func) new elements are supported;
	(userlist_cfg_parse) new elements are supported, their absolute
	  paths are calculated using the value of <var_dir>, if necessary.

	* ejudge-setup.c:
	added support for tuning the value of <log_dir> value of the
	  ejudge.xml configuration file.

	* serve.c: <reuse/exec.h> is included;
	(do_start_cmd) a new function, which executes the program, as
	  specified in the `contest_start_cmd' global configuration
	  variable;
	(cmd_priv_command_0) `do_start_cmd' is called;
	(do_loop) `do_start_cmd' is called.

	* prepare.c, prepare.h:
	new global configuration parameter: `contest_start_cmd';
	(set_defaults) the `contest_start_cmd' is handled;
	  the values of stand_header_file, stand_footer_file,
	  stand2_header_file, stand2_footer_file, plog_header_file,
	  plog_footer_file are treated as paths relative to
	  conf_dir, if they are not absolute.

	* contests.h: new element <conf_dir> is added.

	* contests.c: <reuse/osdeps.h> is included;
	<limits.h> is included;
	new element <conf_dir> is supported;
	(process_conf_file_path) new function, which process the given
	  string, adding the value of the <conf_dir> element in front of
	  the string, if the string is not an absolute path;
	(parse_contest) <conf_dir> element is supported;
	  <conf_dir> is processed, setting its default value to
	  <root_dir>/conf;
	  <register_header_file>, <register_footer_file>, <users_header_file>,
	  <users_footer_file>, <team_header_file>, <team_footer_file>
	  elemets are processed: if the value is a relative path, the
	  <conf_dir> is added in front of this path.

	* edit-userlist.c: 
	(do_display_user_menu) memory leak is fixed.

	* expat_iface.c: 
	(end_hnd) memory leak is fixed.

2004-09-27  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* prepare.c:
	(set_defaults) the standard_checker is correctly inherited from the
	  problem description while initializing the tester.

	* master_html.c: 
	(write_all_runs) "Add new run" link is generated;
	(write_new_run_form) new function, which generates the "Add new run"
	  form.

	* master.c:
	(client_server_down) a new function to report "Server is down"
	  error;
	(action_new_run) a new function to perform the "Add new run"
	  command;
	(parse_client_ip) moved to the clntutil module;
	(initialize) call of `parse_client_ip' is updated;
	(main) the "server down" condition is checked and the appropriate
	  error is reported;
	  new actions ACTION_NEW_RUN_FORM, ACTION_NEW_RUN are supported.

	* prepare.c: "version.h" is included;
	new global parameter `rounding_mode';
	(set_defaults) `rounding_mode' global configuration variable is
	  supported;
	(parse_version_string) new function to parse the version string
	  from version.h;
	(prepare) new parameter `managed_flag' is added, which is set to 1
	  by the caller, if the program is started from the super-serve
	  program;
	  new conditional variables `major', `minor', `patch', `build',
	  `managed' are added.

	* prepare.h: the constands defining the rounding mode are added;
	(struct section_global_data) new fields `rounding_mode' and
	  `rounding_mode_val' are added;
	(prepare) function prototype is updated: a new parameter `managed_flag'
	  is added.

	* protocol.h: new commands added: NEW_RUN_FORM, NEW_RUN;
	new flag PROT_SERVE_RUN_SOURCE_SET is added;
	(struct prot_serve_pkt_run_info) new fields `ip', `run_src_len'
	  are added.

	* runlog.c:
	(run_set_entry) editing of hidden runs before the start of the
	  contest is supported.

	* serve.c:
	(cmd_view) the new `SRV_CMD_NEW_RUN_FORM' command is supported;
	(cmd_edit_run) check for run_src_len == 0 is added;
	(cmd_new_run) a new function to handle `SRV_CMD_NEW_RUN' command;
	(packet_handlers) handlers for the new command mentioned above
	  are added;
	(main) call of `prepare' is updated, as the function now accepts
	  an extra parameter, which is 1, if the program is running in
	  the managed mode.

	* team.c: (parse_client_ip) function is moved to clntutil module;
	(initialize) call of `parse_client_ip' is updated;
	(send_clar_if_asked) dead code is removed;
	(client_server_down) a new function to report the "Server down"
	  error;
	(main) check for "Server down" condition is added. An attempt is
	  made to open a connection to the server immediately. If the
	  attempt fails, the "Server down" error is displayed.

	* register.c:
	(parse_user_ip) function is removed because superseded by the
	  `parse_client_ip' function from the clntutil module;
	(initialize) `parse_client_ip' is used instead of `parse_user_ip'.

	* run.c: (main) call of `prepare' function is updated as the function
	  prototype is changed.

	* serve_clnt.h: (serve_clnt_new_run) new function prototype is added.

	* clntutil.c: (parse_client_ip) return without value bug is fixed.

	* printing.c:
	(do_print_run) the `printer_name' field of the user information
	  is used to direct the listing to the given printer queue.

	* html.h: (write_new_run_form) new function prototype is added.

	* html.c:
	(sec_to_min) a new function, which converts seconds to minutes
	  according to the current rounding mode;
	(do_write_standings) the new `sec_to_min' function is used.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* compile.c:
	(main) call of `prepare' function is updated as the function
	  prototype is changed.

	* clntutil.h: (parse_client_ip) new function prototype is added.

	* clntutil.c:
	(client_lookup_ip) hack for the IPv6 "::1" address is implemented;
	(parse_client_ip) a new function, which is moved here from the
	  main CGI applications source files (master.c, team.c, register.c,
	  users.c).

	* client_actions.h: two new actions added: NEW_RUN_FORM, NEW_RUN.

	* userlist-server.c:
	the logging output format is changed in almost all functions;
	logging output is more terse if the daemon mode is enabled;
	(main) the `-D' option is implemented, which switches the program
	  into the daemon mode: the logging output is directed to the
	  log file as specified by the <userlist_log> element of the
	  ejudge.xml file, the program goes to background and detaches
	  itself from the current controlling terminal.

	* edit-userlist.c:
	new `printer_name' user information field is supported;
	(display_user) the same as above.

	* userlist.c:
	(userlist_get_user_field_str) support for `printer_name' field added;
	(userlist_set_user_field_str) the same as above;
	(userlist_delete_user_field) the same as above.

	* userlist.h: support for `printer_name' user info field is added.

	* userlist_cfg.c:
	elements <admin_email> and <userlist_log> are supported.

	* userlist_cfg.h:
	(struct userlist_cfg) two new fields `admin_email' and `userlist_log'
	  are added.

	* userlist_xml.c:
	support for new user element <printer_name> is added;
	(node_free) the same as above;
	(do_parse_user) the same as above;
	(unparse_user) the same as above.

	* users.c:
	(parse_user_ip) function is removed because superseded by the
	  `parse_client_ip' function from the clntutil module;
	(initialize) `parse_client_ip' is used instead of `parse_user_ip'.

2004-09-19  Alexander Chernov  <cher@ispras.ru>

	* parsecfg.c:
	(copy_param) `M' and `K' suffixes are supported for numbers, where
	  K means factor of 1024, M - factor of 1024 * 1024.

2004-09-18  Alexander Chernov  <cher@ispras.ru>

	* userlist-server.c:
	(cmd_priv_login) check, that the user is not registered for the
	  specified contest is performed and the appropriate error code
	  is returned;
	(cmd_priv_check_cookie) the same as above;
	(do_set_user_info) field `spelling' is supported.

	* edit-userlist.c:
	new `spelling' user information field is supported;
	(display_user) the same as above;
	(user_match) search in `spelling' field is performed in TEXT search.

	* configure.ac: --with-festival option is supported;
	script/festival is added to script lists.

	* compile.c:
	(do_loop) the terminating "0" in the compile packet parsed and checked.

	* cher-configure: added --with-festival argument.

	* master.c:
	better error reporting is implemented, when a user has the neccessary
	  administrative privileges, but is not registered for the contest;
	(error_not_registered) new function to report "Not registered for
	  the contest" error;
	(error_cannot_participate) new function to report "Cannot participate"
	  error;
	(is_auth_error) removed, as no longer used;
	(authentificate) proper handling of the server error code is
	  implemented;
	(initialize) `parse_param' is called with two extra parameters as the
	  interface of the function is changed.

	* parsecfg.c:
	initial support for conditional compilation is implemented;
	lots of new functions for recursive descent parsing of expression;
	(parse_param) two new parameters are accepted, which contain
	  values of predefined conditional variables;
	  conditional compilation lines are handled, a conditional compilation
	  line starts with `@'.

	* parsecfg.h:
	new type `cfg_cond_value_t' is defined to pass the values of
	  conditional variables;
	(parse_param) prototype changed: information about predefined
	  conditional variables is accepted.

	* prepare.c:
	new global parameters: test_pat, corr_pat, info_pat, tgz_pat,
	  extended_sound;
	new problem parameters: spelling, test_pat, corr_pat, info_pat,
	  tgz_pat;
	(problem_init_func) `test_pat', `corr_pat', `info_pat', `tgz_pat'
	  are initialized to "undefined" value;
	(set_defaults) variable substitution is performed for `sound_player';
	  `test_pat', `corr_pat', `info_pat', `tgz_pat' are handled;
	(prepare) two variables: "host", "mode" are defined for conditional
	  compilation during configuration file parsing;
	  call of `parse_param' is updated since its interface is updated,
	  the conditional variable information is passed to `parse_param'.

	* prepare.h:
	(struct section_global_data) new fields: `test_pat', `corr_pat',
	  `info_pat', `tgz_pat', `extended_sound';
	(struct section_problem_data) new fields: `spelling', `test_pat',
	  `corr_pat', `info_pat', `tgz_pat'.

	* run.c:
	removed hard limit on the number of tests for a problem. The test info
	  arrays are automatically adjusted to the maximal number of tests
	  in contest problems.
	(run_tests) added parameters `user_spelling' and `problem_spelling',
	  which are passed unchanged to the sound generation program, if
	  `extended_sound' global configuration variable is set;
	  new problem configuration variables `test_pat', `corr_pat',
	  `info_pat' are used to generate the name of input test file, if they
	  are set;
	  if `extended_sound' global configuration variables is set, the
	  sound generator is called with parameters: run status, test number,
	  problem spelling, user spelling. It may be used by speech generator;
	(struct run_packet_bin) new structure to hold the run packet;
	(parse_packet) a new function to parse the run packet in the format,
	  the results is returned in `struct run_packet_bin';
	(do_loop) `parse_packet' is used to read the run packet;
	(count_files) new parameter `pat' is added to specify the files
	  pattern;
	(check_config) new problem configuration variables `test_pat',
	  `corr_pat', `info_pat' are supported;
	  array for test information is extended automatically, if needed.

	* runlog.c:
	(runlog_check) check, that non-started contest does not have run
	  is removed, since administrative runs are possible.

	* serve.c:
	(write_run_packet) new function to generate a run control packet in
	  the new format. The new format allows passing arbitrary strings
	  and includes new user spelling and problem spelling strings for
	  use in a speech generator;
	(read_compile_packet) the new `write_run_packet' function is used
	  to generate a run packet; user spelling and problem spelling
	  information is passed to that function;
	(queue_compile_request) the compile packet format is slightly
	  changed: the terminator "0" is written after all the data.

	* team.c:
	(initialize) `parse_param' call is updated due to interface change.

	* userlist.h: support for `spelling' user info field is added.

	* userlist_xml.c: support for new user element <spelling> is added;
	(node_free) the same as above;
	(do_parse_user) the same as above;
	(unparse_user) the same as above.

	* userlist.c:
	(userlist_get_user_field_str) support for 'spelling' field added;
	(userlist_set_user_field_str) the same as above;
	(userlist_delete_user_field) the same as above.

2004-09-17  Alexander Chernov  <cher@ispras.ru>

	* unicorn-configure: initial revision

2004-09-09  Alexander Chernov  <cher@ispras.ru>

	* cdeps.c: Fixes for reuse-4 compatibility

2004-09-05  Alexander Chernov  <cher@ispras.ru>

	* super-serve.c:
	(print_info) the function is commented out since is not used.

	* sha.h, sha.c: reuse v4 is supported.

	* serve.c, ncurses_utils.c, edit-userlist.c:
	XALLOCAZ macro is checked for previous definition.

	* configure.ac: reuse v4 is supported.

	* clean-users.c:
	(print_info) the function is commented out since is not used.

	* cher-configure: *** empty log message ***

	* Makefile.in:
	since the reuse 4.0 does not set REUSE_CONF variable, the variable
	is not used. The stuff for win32 compilation is commented out.

2004-08-25  Alexander Chernov  <cher@ispras.ru>

	* revinfo.c: calls of internationalization functions are removed;
	one error message is fixed.

2004-06-20  Alexander Chernov  <cher@ispras.ru>

	* INSTALL, INSTALL.RUS, ejudge.ru_RU.KOI8-R.po:
	*** empty log message ***

	* Makefile.in:
	the references to the libcharset library or to the charset
	  directory are removed.

2004-06-20  Alexander Chernov  <cher@ispras.ru>

	* expat_iface.c: The copyright notice is updated;
	"config.h", "settings.h" are included;
	"nls.h" is removed;
	<iconv.h>, <errno.h> are included;
	the EJUDGE_CHARSET macro is defined to the EJUDGE_INTERNAL_CHARSET
	  macro, if the former is not defined in the "config.h" file;
	(struct parser_data) `conv_hnd' field is added to store the charset
	  conversion descriptor to convert from UTF-8 to the local charset;
	(is_correct_utf8) a new function, which validates an UTF-8 multi-byte
	  sequence;
	(convert_utf8_to_local) a new function, which converts the UTF-8
	  string to the string in the local charset as defined by the
	  EJUDGE_CHARSET macro;
	(convert_utf8_to_local_heap) a new conversion function, which returns
	  the result in dynamic memory;
	(encoding_hnd) rewritten using the `iconv' facilities;
	(start_hnd) the tag and attribute names are not converted to the
	  local charset, the attribute value is converted using the new
	  `convert_utf8_to_local_heap' function;
	(end_hnd) the element text is converted to the local charset using the
	  `convert_utf8_to_local_heap' function;
	(xml_build_tree) the conversion descriptor to convert from the UTF-8
	  charset to the local charset is managed and passed to the parsing
	  routines;
	(xml_build_tree_str) the same as above;
	(xml_unparse_tree) the EJUDGE_CHARSET is used as the charset of the
	  generated XML file instead of "KOI8-R";
	the emacs' "Cyrillic-KOI8" language environment setting is removed.

	* files.make: nls.h is removed;
	charsets/*.c files are removed.

	* html.c:
	The `koi8-r' charset specification is removed from the file header;
	"settings.h" is included;
	The EJUDGE_CHARSET macro is defined to the EJUDGE_INTERNAL_CHARSET
	  macro, if the former is not defined in "config.h";
	(write_standings_header) the `charset' configuration variable
	  is used instead of `standings_charset';
	(write_standings) support for the `standings_charset' configuration
	  variable is commented out;
	(do_write_public_log) the EJUDGE_CHARSET is used as the charset for
	  the generated text/plain file instead of "KOI8-R".

	* prepare.c:
	`standings_charset' global configuration variable is commented out;
	(set_defaults) handling of `standings_charset' is commented out.

	* prepare.h: "nls.h" is removed;
	(struct section_global_data) `charset_ptr', `standings_charset',
	  `standings_charset_ptr' fields are commented out.

	* runlog_xml.c:
	The `koi8-r' charset specification is removed from the file header;
	"config.h", "settings.h" are included;
	The EJUDGE_CHARSET macro is defined to the EJUDGE_INTERNAL_CHARSET
	  macro, if the former is not defined in "config.h";
	(unparse_runlog_xml) the EJUDGE_CHARSET is printed as the XML file
	  charset instead of "KOI8-R".

	* serve.c:
	The `koi8-r' charset specification is removed from the file header;
	The EJUDGE_CHARSET macro is defined to the EJUDGE_INTERNAL_CHARSET
	  macro, if the former is not defined in "config.h";
	(cmd_view) the EJUDGE_CHARSET is used as the charset for the
	  generated text/plain documents instead of "KOI8-R".

	* settings.h:
	EJUDGE_INTERNAL_CHARSET macro is added and defined to "UTF-8".

	* team_extra_xml.c: "config.h", "settings.h" are included;
	The EJUDGE_CHARSET macro is defined to the EJUDGE_INTERNAL_CHARSET
	  macro, if the former is not defined in "config.h";
	(team_extra_unparse_xml) the EJUDGE_CHARSET is printed as the
	  XML file charset instead of "KOI8-R".

	* userlist-server.c:
	The EJUDGE_CHARSET macro is defined to the EJUDGE_INTERNAL_CHARSET
	  macro, if the former is not defined in "config.h";
	(send_email_message) the EJUDGE_CHARSET charset is used instead of
	  "KOI8-R", if the `charset' parameter is NULL.

	* filter_eval.c: The copyright notice is updated;
	The emacs' "Cyrillic-KOI8" language environment setting is removed.

	* userlist_proto.c:
	The `koi8-r' charset specification is removed from the file header;
	The copyright notice is updated;
	The emacs' "Cyrillic-KOI8" language environment setting is removed.

	* userlist_xml.c: "config.h", "settings.h" are included;
	"nls.h" is removed;
	the EJUDGE_CHARSET defined to the EJUDGE_INTERNAL_CHARSET, if the
	  former is not defined in "config.h";
	(userlist_unparse_user) the EJUDGE_CHARSET is used as the XML file
	  encoding instead of "KOI8-R";
	(userlist_unparse_contests) the same as above;
	(userlist_unparse) the same as above;
	(userlist_unparse_short) the same as above;
	(userlist_unparse_for_standings) the same as above.

	* register.c:
	The `koi8-r' charset specification is removed from the file header;
	"settings.h" is included;
	DEFAULT_CHARSET macro is replaced with EJUDGE_CHARSET.
	EJUDGE_CHARSET macro is defined to EJUDGE_INTERNAL_CHARSET, if the
	  former is not defined in config.h;
	(parse_config) the EJUDGE_CHARSET is ised instead of DEFAULT_CHARSET;
	(default_config) explicit charset is removed, since "UTF-8" is ok
	  for this file;
	(client_put_refresh_header) the EJUDGE_CHARSET is used instead of
	  DEFAULT_CHARSET;
	(do_make_user_xml) the EJUDGE_CHARSET is used instead of "KOI8-R".

	* users.c:
	The `koi8-r' charset specification is removed from the file header;
	"settings.h" is included;
	DEFAULT_CHARSET macro is replaced with EJUDGE_CHARSET.
	EJUDGE_CHARSET macro is defined to EJUDGE_INTERNAL_CHARSET, if the
	  former is not defined in config.h;
	(default_config) explicit charset is removed, since "UTF-8" is ok
	  for this file.

	* ejudge-setup.c:
	The `koi8-r' charset specification is removed from the file header.
	(generate_ejudge_xml) code for generation of <charset> element is
	  fixed;
	(generate_install_script) the last "chmod" command is fixed.

	* master_html.c, ncurses_utils.c, protocol.c, runlog_import.c, sformat.c, team.c, tex_dom.c, tex_dom_doc.c, tex_dom_parse.c, tex_dom_render.c, userlist.c, cgi.c, clntutil.c, contests.c, cr_serialize.c, edit-userlist.c, filter_scan.lex, master.c:
	The `koi8-r' charset specification is removed from the file header.

2004-06-17  Alexander Chernov  <cher@ispras.ru>

	* INSTALL.RUS: initial revision

	* Makefile.in: `tags' rule is added;
	removal of `TAGS' file is added to `distclean' rule.

	* ejudge-setup.c: "Installation script" is renamed to "Setup script".

2004-05-27  Alexander Chernov  <cher@ispras.ru>

	* cher-configure:
	the command-line arguments are further passed to configure.

	* Makefile.in: rules for ejudge-config script generation are added.

	* configure.ac: --disable-rpath option is supported;
	ejudge-config.v script is added to the list of substituted scripts.

	* ejudge-config.v.in: initial revision

2004-05-26  Alexander Chernov  <cher@ispras.ru>

	* team.c, register.c, users.c, master.c:
	(initialize) support for cgi program suffix (defined by CGI_PROG_SUFFIX
	  from the config.h) is implemented.

	* userlist_cfg.h: copyright notice is added;
	(struct userlist_cfg) the following new fields are added:
	  serialization_key, charset, config_dir, contests_home_dir,
	  full_cgi_data_dir, compile_home_dir, testing_work_dir,
	  script_dir.

	* userlist_cfg.c:
	support for the following new elements is added: <charset>,
	  <config_dir>, <contests_home_dir>, <full_cgi_data_dir>,
	  <compile_home_dir>, <testing_work_dir>, <script_dir>,
	  <serialization_key>;
	support for the new attribute "ejudge_user" is added.

	* serve.c:
	(create_symlinks) a new function, which creates symlink to the
	  standings html files in the var/status/dir contest directory;
	(do_loop) `create_symlinks' is called.

	* prepare.h:
	(struct section_global_data) new fields added: `htdocs_dir',
	  `stand_symlink_dir', `stand2_symlink_dir', `plog_symlink_dir'.

	* prepare.c: new global configuration variables added: `htdocs_dir',
	  `stand_symlink_dir', `stand2_symlink_dir', `plog_symlink_dir'.

	* ejudge-setup.c: initial revision

	* Makefile.in:
	rules for compilation of `ejudge-setup' utility are added.

	* files.make:
	new files added: ncurses_utils.c, tex_dom.c, tex_dom_parse.c,
	  tex_dom_doc.c, tex_dom_render.c, ejudge-setup.c, ncurses_utils.h,
	  tex_dom.h.

	* configure.ac: many new options added.

	* config.h.in, cher-configure:
	modified for the new configure options.

	* ncurses_utils.c, ncurses_utils.h, tex_dom_parse.c, tex_dom_render.c, tex_dom.c, tex_dom.h, tex_dom_doc.c:
	initial revision

2004-05-10  Alexander Chernov  <cher@ispras.ru>

	* pathutl.c: copyright notice is updated;
	(chop) all trailing spaces from the end of the string are removed.

	* prepare.c: new language configuration variable `compiler_env';
	(set_defaults) `compiler_env' configuration variable is handled.

	* prepare.h:
	(struct section_language_data) `compiler_env' field is added.

	* serve.c:
	(cmd_priv_submit_run) compiler_env parameter is added to call of
	  `queue_compile_request';
	(cmd_team_submit_run) the same as above;
	(queue_compile_request) new parameter `compiler_env' is added;
	  the compile packet format is updated to allow passing environment
	  variables to the compile program;
	(rejudge_run)
	  `compiler_env' is passed to `queue_compile_request'.

	* configure.ac: new option --enable-conf-dir is added.

	* compile.c:
	(do_loop) compile packet format is extended to pass the environment
	  variables for the compiler;
	  these environment variables are extracted and passed to the
	  compiler process.

	* cher-configure: *** empty log message ***

2004-05-07  Alexander Chernov  <cher@ispras.ru>

	* config.h.in: added EJUDGE_CONF_DIR.

2004-05-06  Alexander Chernov  <cher@ispras.ru>

	* Makefile.in: the makefile is renamed to Makefile.in;
	the Makefile.in is integrated in autoconf framework;
	the directory structure is reorganized.

	* prepare.h:
	(struct section_problem_data) new field `checker_env' is added;
	(struct section_tester_data) new field `checker_env' is added.

	* prepare.c: "varsubst.h" is included;
	new problem configuration variable `checker_env' is added;
	new tester configuration variable `checker_env' is added;
	(set_defaults) `checker_env' problem configuration variable is
	  supported. Variable substitution is performed on it;
	  variable substitution is performed on `start_env' tester
	  configuration variable;
	  `checker_env' tester configuration variable is supported,
	  variable substitution is performed on it.
	(prepare_tester_refinement)
	  variable substitution is performed on `start_env';
	  new tester configuration variable `checker_env' is supported;
	  variable substitution is performed on `checker_env'.

	* files.make: varsubst.c is added to COMMON_CFILES;
	varsubst.h is added to HFILES.

	* run.c: 
	(run_tests) the checker is started with some logging;
	  checker_env configuration variable is supported.

	* testinfo.h: copyright notice is updated;
	protection against C++ is added;
	in C++ mode char * is used instead of unsigned char * for strings.

	* varsubst.c, varsubst.h, configure.ac: initial revision

	* prepare.c:
	the `builtin_checker' global configuration variable is renamed to
	  `standard_checker';
	(prepare_tester_refinement) `builtin_checker' field is renamed to
	  `standard_checker';
	  `builtin_checker_used' is renamed to `standard_checker_used'.

	* prepare.h:
	(struct section_problem_data) `builtin_checker' field is renamed to
	  `standard_checker';
	  `builtin_checker_used' is renamed to `standard_checker_used'.

	* run.c:
	(run_tests) builtin_checker_used is renamed to standard_checker_used;
	(process_default_testers) the same as above.

	* master.c:
	DEFAULT_CHARSET is set to EJUDGE_CHARSET from "config.h" if the macro
	  is defined there, or to "iso8859-1" as the fallback value;
	(params) the global section initialization function is added;
	(global_init_func) a new function for initialization of the global
	  section;
	(display_enter_password_2) DEFAULT_CHARSET is used;
	(client_put_refresh_header) DEFAULT_CHARSET is used;
	(set_defaults) EJUDGE_LOCALE_DIR from "config.h" is used as the
	  default value for `l10n_dir' variable if the locallization is
	  enabled;
	(initialize) if no config file exists, `param_make_global_section'
	  is used to create a global configuration variables section with
	  the default values;
	  EJUDGE_SOCKET_PATH from "config.h" is used as the default value
	  for `socket_path' configuration variable;
	  EJUDGE_CONTESTS_DIR from "config.h" is used as the default value
	  for `contests_dir' configuration variable;
	  `allow_deny' is by default set to 1.

	* prepare.c: "config.h" is included;
	unnecessary use of <libintl.h> is removed;
	new global configuration parameter `ejudge_checkers_dir';
	new global configuration parameter `builtin_checker';
	DFLT_G_CHARSET macro is defined to EJUDGE_CHARSET from "config.h",
	  if the macro is defined, or to "iso8859-1" as the fallback value;
	(global_init_func) `enable_l10n' is set to -1;
	(set_defaults) EJUDGE_SOCKET_PATH from "config.h" is used as the
	  default value for `socket_path';
	  EJUDGE_CONTESTS_DIR from "config.h" is used as the default value
	  for `contests_dir';
	  EJUDGE_SCRIPT_DIR from "config.h" is used as the default value for
	  `script_dir';
	  EJUDGE_SCRIPT_DIR from "config.h" is used as the default value for
	  the new variable `ejudge_checkers_dir';
	  EJUDGE_LOCALE_DIR from "config.h" is used as the default value for
	  `l10n_dir', if the localization is enabled;
	(prepare_tester_refinement) the `builtin_checker' variable is used.

	* register.c:
	DEFAULT_CHARSET macro is defined to EJUDGE_CHARSET from "config.h", or
	  to "iso8859-1", if the latter is not defined;
	(parse_config) new parameter `default_config' is added, which is
	  the configuration file embedded in string;
	  the default configuration file is preferred, if the corresponding
	  function parameter != 0;
	  `l10n', <l10n_dir> are supported regardless of localization support;
	  EJUDGE_LOCALE_DIR from "config.h" is used as the default value for
	  <l10n_dir> element, if the localization is enabled;
	  DEFAULT_CHARSET from "config.h" is used as the default value for
	  `charset' attribute;
	  EJUDGE_SOCKET_PATH from "config.h" is used as the default value for
	  <socket_path> element;
	  EJUDGE_CONTESTS_DIR from "config.h" is used as the default value for
	  <contests_dir> element;
	(initialize) the default config string is provided to `parse_config',
	  if no configuration file is found;
	(client_put_refresh_header) DEFAULT_CHARSET is used.

2004-05-05  Alexander Chernov  <cher@ispras.ru>

	* cher-configure, config.h.in: initial revision

	* parsecfg.c:
	(param_make_global_section) a new function, which creates the global
	  section in memory with the default values, as if this global
	  section was read from file.

	* parsecfg.h: copyright notice is updated;
	(param_make_global_section) new function prototype is added.

	* prepare.h:
	(struct section_global_data) new field `ejudge_checkers_dir' is
	  added;
	(struct section_tester_data) new fields `builtin_checker' and
	  `builtin_checker_used' are added.

	* run.c: "config.h" is included;
	(run_tests) `builtin_checker_used' tester variable is honored;
	(process_default_testers) the same as above.

	* serve.c: "config.h" is included;
	(cmd_team_page) "dereferencing type-punned pointer will break
	  strict-aliasing rules" warning is fixed;
	(cmd_master_page) the same as above;
	(cmd_priv_standings) the same as above;
	(cmd_view) the same as above;
	(cmd_import_xml_runs) the same as above;
	(cmd_message) the same as above;
	(cmd_team_show_item) the same as above;
	(read_compile_packet) possible uninitialized variable use of
	  `team_flags' warning is fixed.

	* super-serve.c: copyright notice is updated;
	"config.h" is included;
	(main) if the configuration file name is not provided in the command
	  line arguments, the default path EJUDGE_XML_PATH is used, if the
	  macro is defined in "config.h".

	* team.c:
	DEFAULT_CHARSET is defined to EJUDGE_CHARSET from "config.h", and
	  to "iso8859-1", if the latter macro is not defined;
	(params) global section initialization function `global_init_func'
	  is added;
	(global_init_func) the function sets `enable_l10n' and `allow_deny'
	  configuration variables to "undefined" (-1) value;
	(set_defaults) EJUDGE_LOCALE_DIR from "config.h" is used as the
	  default value for `l10n_dir', if localization is enabled;
	(initialize) a default configuration variables are created, if no
	  configuration file is found;
	  EJUDGE_SOCKET_PATH is used as the default value for `socket_path'
	  configuration variable;
	  EJUDGE_CONTESTS_DIR is used as the default value for `contests_dir'
	  configuration variable;
	  the default value for `allow_deny' is set to 1;
	(client_put_refresh_header) DEFAULT_CHARSET is used as the default
	  charset.

	* userlist-server.c: "config.h" is included;
	gettext() macro is defined, if localization is disabled;
	(cmd_register_new) possible uninitialized variable read for
	  `login_hash' variable warning is fixed;
	(cmd_do_login) possible uninitialized variable read for `user'
	  variable warning is fixed;
	(cmd_check_cookie) possible uninitialized variable read for `cookie'
	  variable warning is fixed;
	(cmd_get_user_info) "dereferencing type-punned pointer will break
	  strict-aliasing rules" warning is fixed;
	(cmd_priv_get_user_info) the same as above;
	(cmd_list_standings_users) the same as above;
	(cmd_get_user_contests) the same as above;
	(cmd_list_users) the same as above;
	(cmd_dump_database) the same as above;
	(cmd_generate_register_passwords) the same as above;
	(cmd_generate_team_passwords) the same as above;
	(cmd_add_field) possible uninitialized variable read for
	  `login_hash' variable warning is fixed;
	(do_backup)  "dereferencing type-punned pointer..." warning is fixed;
	(main) if no command-line arguments is given, and the macro
	  `EJUDGE_XML_PATH' is defined in "config.h", value of this
	  macro is used as the default path to the configuration file.

	* userlist_cfg.c: "config.h" is included;
	(userlist_cfg_parse) `EJUDGE_LOCALE_DIR' from "config.h" is used as
	  the default value for <l10n_dir> element;
	  `EJUDGE_SOCKET_PATH' from "config.h" is used as the default value
	  for <socket_path> element;
	  `EJUDGE_CONTESTS_DIR' from "config.h" is used as the default value
	  for <contests_dir> element;
	  `EJUDGE_SERVE_PATH' from "config.h" is used as the default value
	  for <serve_path> element;
	  `EJUDGE_RUN_PATH' from "config.h" is used as the default value
	  for <run_path> element.

	* users.c:
	EJUDGE_CHARSET macro is set to EJUDGE_CHARSET from "config.h", or
	  to "iso8859-1", if the EJUDGE_CHARSET macro is not defined;
	(parse_config) new parameter `default_config' is added, which is
	  a configuration string, if the parameter has non-null value,
	  it is preferred over the first parameter - path to the configuration
	  file;
	  `l10n', `l10n_dir' are parsed regardless of internalization support;
	  EJUDGE_LOCALE_DIR from "config.h" is used as the default value
	  for `l10n_dir' element;
	  EJUDGE_SOCKET_PATH from "config.h" is used as the default value
	  for `socket_path' element;
	  EJUDGE_CONTESTS_DIR from "config.h" is used as the default value
	  for `contests_dir' element;
	(initialize) the default configuration string is provided to
	  `parse_config', if no configuration file is found.

	* edit-userlist.c: "config.h" is included;
	(main) if no command-line arguments are given, the default path
	  to the configuration file EJUDGE_XML_PATH is used.

	* clntutil.c:
	DEFAULT_CHARSET macro is set either to EJUDGE_CHARSET from config.h,
	  if it is defined, or to iso8859-1;
	(client_put_header) DEFAULT_CHARSET macro is used.

	* clean-users.c: "config.h" is included;
	(main) if no command line parameters are given, the default path to
	  the configuration file EJUDGE_XML_PATH is used.

	* cgi.c: "config.h" is included;
	DEFAULT_CHARSET macro is defined to EJUDGE_CHARSET if this is set,
	  iso8859-1 else;
	(bad_request) DEFAULT_CHARSET is used;
	(request_too_large) the same as above.

2004-05-04  Alexander Chernov  <cher@ispras.ru>

	* runlog_import.c:
	(runlog_import_xml) a GNU C 3.3 warning about breaking strict aliasing
	  rules in -Wall -O2 mode is fixed.

	* runlog.c: "config.h" is included;
	(run_set_entry) possible unitialized use of variable `ue' warning
	  is fixed.

	* master_html.c: "config.h" is included;
	(write_all_runs) a GNU C 3.3 warning about breaking strict aliasing
	  rules in -Wall -O2 mode is fixed;
	  possible uninitialized varible `match_idx' usage warning is fixed;
	(write_priv_clar) a GNU C 3.3 warning about breaking strict aliasing
	  rules in -Wall -O2 mode is fixed;
	(write_priv_users) the same as above.

	* html.c: "config.h" is included;
	(new_write_user_clars) a GNU C 3.3 warning about breaking strict
	  aliasing rules in -Wall -O2 mode is fixed;
	(do_write_standings) the same as above.

	* opcaps.c:
	(opcaps_parse) a GNU C 3.3 warning about breaking strict aliasing
	  rules in -Wall -O2 mode is fixed.

	* runlog_xml.c:
	(parse_sha1) a GNU C 3.3 warning about breaking strict aliasing
	  rules in -Wall -O2 mode is fixed.

	* l10n.c: copyright notice is updated;
	"config.h" is included;
	`l10n_flag' compiled out, if CONF_HAS_LIBINTL is not set.

	* filter_scan.lex:
	(handle_int) a GNU C 3.3 warning about breaking strict aliasing
	  rules in -Wall -O2 mode is fixed.

	* master.c: "config.h" is included.

	* misctext.c: copyright notice is updated;
	"config.h" is included.

	* register.c: "config.h" is included;
	`gettext' is defined to empty macro if CONF_HAS_LIBINTL is not defined.
	(make_user_xml) a GNU C 3.3 warning about breaking strict aliasing
	  rules in -Wall -O2 mode is fixed.

	* team.c, users.c: copyright notice is updated;
	"config.h" is included;
	`gettext' is defined to empty macro if CONF_HAS_LIBINTL is not defined.

	* edit-userlist.c:
	(display_registered_users) a GNU C 3.3 warning about breaking strict
	  aliasing rules in -Wall -O2 mode is fixed;
	(do_display_user_menu) the same as above.

	* copyright.c, clntutil.c: "config.h" is included.

	* clean-users.c:
	(main) possible using of uninitialized variable `j' warning is fixed.

	* userlist_cfg.c, teamdb.c: copyright notice is updated;
	unnecessary include of <libintl.h> and check for CONF_HAS_LIBINTL is
	  removed.

	* revinfo.c:
	unnecessary include of <libintl.h> and check for CONF_HAS_LIBINTL is
	  removed.

	* parsecfg.c: copyright notice is updated;
	unnecessary include of <libintl.h> and check for CONF_HAS_LIBINTL is
	  removed.

	* compile.c:
	unnecessary include of <libintl.h> and check for CONF_HAS_LIBINTL is
	  removed.

	* clarlog.c: copyright notice is updated;
	unnecessary include of <libintl.h> and check for CONF_HAS_LIBINTL is
	  removed.

	* cgi.c:
	unnecessary include of <libintl.h> and check for CONF_HAS_LIBINTL is
	  removed.

	* base64.c: copyright notice is updated;
	unnecessary include of <libintl.h> and check for CONF_HAS_LIBINTL is
	  removed.

2004-05-03  Alexander Chernov  <cher@ispras.ru>

	* TODO: *** empty log message ***

	* install-sh: initial revision

	* makefile: Converted to Makefile.in.

2004-04-20  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2004-04-19  Alexander Chernov  <cher@ispras.ru>

	* files.make: serve_clnt/rejudge_by_mask.c is added.

	* master.c:
	`force_recheck_status' variable is removed, since in the current mode
	  of operation this variable and the associated action in `main' are
	  redundant;
	(confirm_rejudge_displayed) a new function, which generates the
	  confirmation dialog for the "Rejudge displayed runs" button;
	(action_rejudge_displayed) a new function to perform the abovementioned
	  operation;
	(main) new actions `REJUDGE_DISPLAYED_1', `REJUDGE_DISPLAYED_2' are
	  supported.

	* master_html.c:
	(write_all_runs) the run bitmask of all the displayed runs is
	  collected;
	  a new button "Rejudge displayed runs" is generated, and the
	  calculated bitmask is used.

	* prepare.c:
	new problem configuration variable `disable_language' is added;
	(set_defaults) the new configuration variable is handled.

	* prepare.h:
	(struct section_problem_data) a new field `disable_language' is
	  added.

	* protocol.c: (error_map) a new error is added.

	* protocol.h: new command SRV_CMD_REJUDGE_BY_MASK is added;
	new error code SRV_ERR_LANGUAGE_DISABLED is added;
	(struct prot_serve_pkt_rejudge_by_mask) a new structure is added.

	* serve.c:
	(cmd_team_submit_run) the `disable_language' problem configuration
	  variable is honored;
	(cmd_rejudge_by_mask) a new function to handle the corresponding
	  command;
	(do_rejudge_by_mask) a new function to rejudge the runs according
	  to the passed bitmask;
	(packet_handlers) the handler `cmd_rejudge_by_mask' for
	  `REJUDGE_BY_MASK' command is added.

	* serve_clnt.h:
	(serve_clnt_rejudge_by_mask) new function prototype is added.

	* userlist-server.c:
	(cmd_register_contest) the `closed' flag of the contest description
	  is honored.

	* client_actions.h:
	new actions REJUDGE_DISPLAYED_1 and REJUDGE_DISPLAYED_2 are added.

2004-04-18  Alexander Chernov  <cher@ispras.ru>

	* master_html.c:
	(struct user_state_info) the user specific filter information is
	  handled differently: for each (privileged) user a linked list
	  of `struct user_filter_info' is kept. The items of the list contain
	  the session_id (cookie) as the key and all the information
	  prevouosly stored in `struct user_state_info'. This allows having
	  several browsers with different filter settings for the same
	  user;
	(write_all_runs) the type of the second parameter is changed:
	  `struct user_filter_info' instead of `struct user_state_info';
	(write_all_clars) the same as above;
	(allocate_user_info) now accept two parameters: the second parameter
	  is the session identifier; also the return type is changed from
	  `struct user_state_info' to `struct user_filter_info';
	(write_master_page) call of `allocate_user_info' is updated;
	(html_reset_filter) the second parameter `session_id' is added;
	  call of `allocate_user_info' is updated.

	* prepare.h: (struct user_adjustment_info) a new structure;
	(struct section_global_data) new fields: `priority_adjustment',
	  `user_priority_adjustments', `user_adjustment_info',
	  `user_adjustment_map';
	(struct section_problem_data) new field `priority_adjustment';
	(struct section_language_data) new field `priority_adjustment';
	(struct section_tester_data) new field `priority_adjustment';
	(find_user_priority_adjustment) new function prototype.

	* prepare.c: "settings.h" is included;
	MAX_LANGUAGE, MAX_PROBLEM, MAX_TESTER are moved to "settings.h";
	new global parameters: priority_adjustment, user_priority_adjustments;
	new problem parameter: priority_adjustment;
	new language parameter: priority_adjustment;
	new tester parameter: priority_adjustment;
	(problem_init_func) `priority_adjustment' is handled;
	(tester_init_func) `priority_adjustment' is handled;
	(inh_isdef_int3) a new function to check, whether the
	  `priority_adjustment' variable is undefined (equals to -1000);
	(tester_inheritance_info) `priority_adjustment' info is added;
	(parse_user_adjustment) a new function to parse the
	  `user_priority_adjustments' variable;
	(find_user_priority_adjustment) a new function to find priority
	  adjustment corresponding to the given user_id;
	(set_defaults) all the new fields are handled;
	(prepare_tester_refinement) `priority_adjustment' field is handled.

	* master.c:
	(action_reset_filter) `serve_clnt_reset_filter' is called instead of
	  `serve_clnt_simple_cmd';
	(display_master_page) `client_sid' is passed to the
	  `serve_clnt_master_page'.

	* contests.h: copyright notice is updated;
	`CLOSED' attribute is added;
	(struct contest_desc) `closed' field is added.

2004-04-17  Alexander Chernov  <cher@ispras.ru>

	* contests.c: copyright notice is updated;
	attribute `closed' is supported;
	(parse_contest) the `closed' attribute has not gave the proper result.

	* html.h:
	(html_reset_filter) new parameter `session_id' is added to pass
	  the session identifier.

	* files.make: `reset_filter.c' is added to the SERVE_CLNT_CFILES.

	* protocol.c:
	(error_map) BAD_SESSION_ID error text is translated to Russian.

	* protocol.h: new error code SRV_ERR_BAD_SESSION_ID is added;
	(struct prot_serve_pkt_master_page) `session_id' field is added;
	(struct prot_serve_pkt_reset_filter) new packet.

	* register.c: copyright notice is updated;
	(check_contest_eligibility) the contest is not eligible, if the
	  `closed' flag is set to true;
	(display_main_page) the contest is not diplayed, if its closed
	  flag is set to `true'.

	* serve.c:
	(cmd_reset_filter) a new function to execute RESET_FILTER command,
	  previously this command was handled in `cmd_judge_command_0';
	  `cmd_judge_command_0' is commented out;
	(generate_packet_name) now accepts `prio' parameter for the priority
	  value in range [-32;31);
	  priority is the first character of the generated packet file name;
	(read_compile_packet) the run packet priority is calculated using
	  the new configuration variable;
	  the calculated priority is passed to `generate_packet_name';
	(queue_compile_request) `generate_packet_name' is always called
	  with 0 as the priority value;
	(packet_handler) `cmd_reset_filter' replaced `cmd_judge_command_0'
	  in the handler for the RESET_FILTER command.

	* serve_clnt.h:
	(serve_clnt_master_page) a new parameter `session_id' to pass the
	  session identifier (cookie) is added;
	(serve_clnt_reset_filter) a new function prototype.

	* settings.h:
	SERVE_PACKET_NAME_SIZE constant is added to hold the size of
	  serve->run and serve->compile packet name;
	MAX_LANGUAGE is moved here;
	MAX_PROBLEM is moved here;
	MAX_TESTER is moved here.

	* team.c: (client_contest_closed) a new function, which generates the
	  "Contest is closed" html page, if the `closed' flag of the given
	  contest is set to `true';
	(main) `client_contest_closed' is called when necessary.

2004-04-16  Alexander Chernov  <cher@ispras.ru>

	* team.c:
	`max_clar_size', `max_run_size' configuration parameters are removed,
	  since the size checks are also performed at the server's side.

	* userlist-server.c: "settings.h" is included;
	MAX_EXPECTED_LEN constant is defined for the maximal packet length,
	  this constant's value is set to MAX_USERLIST_PACKET_LEN from
	  "settings.h".

	* serve.c: "settings.h" is included;
	MAX_EXPECTED_LEN constant is defined for the maximal packet length,
	  this constant's value is set to MAX_SERVE_PACKET_LEN from settings.h.

	* files.make: settings.h is added.

	* cgi.c: "settings.h" is included;
	MAX_CGI_VALUE_LEN from settings.h is used as maximal content-length.

	* settings.h: initial revision

2004-04-01  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* clean-users.c:
	"userlist_clnt.h", "userlist_proto.h", <reuse/osdeps.h>, <ctype.h>
	  are included;
	(print_info) usage message is updated;
	(main) -r and -f options are supported;
	  user removal is supported.

2004-03-31  Alexander Chernov  <cher@ispras.ru>

	* master.c:
	(view_source_if_asked) call of `serve_clnt_view' is updated, as the
	  function now accept one more parameter;
	(view_report_if_asked) if the `t' CGI variable is set, the flags
	  parameter, which is passed to `serve_clnt_view' is also set to 1,
	  thus the participant's version of the judging report is requested;
	(view_teams_if_asked) call of `serve_clnt_view' is updated, as the
	  function now accept one more parameter;
	(action_dump_runs) the same as above;
	(action_write_xml_runs) the same as above;
	(action_export_xml_runs) the same as above;
	(action_dump_standings) the same as above;
	(action_upload_report) a new function to perform the judging report
	  upload to the server;
	(action_priv_download_run) call of `serve_clnt_view' is updated, as the
	  function now accept one more parameter;
	(action_compare_runs) the same as above;
	(view_clar_if_asked) the same as above;
	(main) UPLOAD_REPORT action is handled and `action_upload_report'
	  function is called.

	* master_html.c:
	(print_nav_buttons) new parameter `t7' is added to pass the
	  string for "View team report" button;
	  the reference for t7 is generated, if global configuration
	  variable `team_enable_rep_view' is set to TRUE;
	(write_all_runs) call of `print_nav_buttons' is updated;
	(write_all_clars) the same as above;
	(write_master_page) the same as above;
	(write_priv_standings) the same as above;
	(write_priv_source) call of `print_nav_buttons' is updated;
	  report upload form is generated, if `enable_report_upload'
	  global configuration variable is set to TRUE;
	  "View team report" link is generated in updated call to
	  `print_nav_buttons';
	(write_priv_report) new parameter `team_report_flag' is added;
	  if `team_report_flag' is TRUE, the participant's report is
	  displayed instead of the judge's report;
	  "View team report" link is generated in updated call to
	  `print_nav_buttons';
	(write_priv_clar) call of `print_nav_buttons' is updated;
	(write_priv_users) the same as above.

	* prepare.c:
	new global configuration variable `enable_report_upload' is added;
	new problem configuration variable `date_penalty' is added;
	(parse_deadline_penalties) a new function to parse the values in
	  the `date_penalty' variable;
	(set_defaults) `parse_deadline_penalties' is called.

	* prepare.h:
	(struct penalty_info) a new structure to store the parsed values
	  for `date_penalty' problem configuration variable;
	(struct section_global_data) field `enable_report_upload' is added;
	(struct section_problem_data) fields `date_penalty', `dp_total',
	  `dp_infos' are added.

	* protocol.h: new command SRV_CMD_UPLOAD_REPORT is added;
	(struct prot_serve_pkt_view) field `flags' is added;
	(struct prot_serve_pkt_upload_report) a new structure to pass
	  the data for UPLOAD_REPORT request.

	* serve.c:
	(cmd_view) the value of `flags' field of the incoming packet is
	  passed to `write_priv_report' function in the VIEW_REPORT
	  handling code;
	(cmd_upload_report) a new function to handle UPLOAD_REPORT request;
	(read_run_packet) the data-dependent penalties (see `data_penalty'
	  global configuration variable) are applied;
	(packet_handlers) handler for UPLOAD_REPORT command is added.

	* client_actions.h: added new action UPLOAD_REPORT.

	* html.h:
	(write_priv_report) a new parameter `team_report_flag' is added.
	  If this parameter is set to 1, the participant's report is
	  displayed instead of the judge's report.

	* files.make: serve_clnt/upload_report.c is added.

	* serve_clnt.h: 
	(serve_clnt_view) a new parameter `flags' is added;
	(serve_clnt_upload_report) a new function prototype.

	* userlist-server.c:
	(cmd_get_uid_by_pid) arbitrary system user id and group id are
	  allowed. This fixes a bug, that in certain setups the web
	  server operates with gid == -1.

2004-03-27  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* serve.c: "diff.h" is included;
	new global status variable `printing_suspended';
	(update_status_file) the current status is written as status
	  version 2 structure, including new fields enable_printing,
	  `printing_suspended';
	(load_status_file) a new function, which attempts to load the
	  server status structure and sets `clients_suspended',
	  `testing_suspended', `olympiad_judging_mode', `printing_suspended'
	  global status variables with values from the status file;
	(cmd_team_page) the `printing_suspended' variable is passed to
	  `write_team_page';
	(cmd_view) `PRIV_DOWNLOAD_RUNS', `COMPARE_RUNS' are supported;
	(cmd_priv_submit_run) arbitrary binary data is handled properly,
	  if the language has the `binary' configuration variable set to
	  TRUE;
	  precise time is obtained with `gettimeofday' and then passed to
	  `run_add_record';
	(cmd_team_print) printing request is rejected, if printing disabled;
	(cmd_team_submit_run) arbitrary binary data is handled properly,
	  if the language has the `binary' configuration variable set to
	  TRUE;
	  precise time is obtained with `gettimeofday' and then passed to
	  `run_add_record';
	(cmd_command_0) precise time is obtained with `gettimeofday' and
	  then passed to `run_virtual_start' or `run_virtual_stop';
	(cmd_priv_command_0) PRINT_SUSPEND, PRINT_RESUME commands are
	  handled;
	(packet_handlers) new commands: PRIV_DOWNLOAD_RUN, PRINT_SUSPEND,
	  PRINT_RESUME, COMPARE_RUNS are handled;
	(main) `load_status_file' is called to load the server status.

	* runlog_xml.c: copyright notice is updated;
	`nsec' attribute of the `run' element is handled;
	(process_run_elements) `time' attribute now contains the time in
	  seconds instead the time in milliseconds;
	  `nsec' attribute is handled;
	(process_runlog_element) element nesting <runlog> -> <runs> -> <run>
	  is properly handled;
	(collect_runlog) the `xt' parameter now points to the first <run>
	  element in the list;
	  submission field of the collected runlog is initialized;
	(unparse_runlog_xml) the `time' attribute of the <run> element now
	  contain the time in seconds instead of the time in milliseconds;
	  the `nsec' attribute is generated.

	* runlog_import.c: copyright notice is updated;
	(runlog_import_xml) `nsec' field is handled.

	* runlog.h: 
	(run_add_record) parameter `nsec' is added;
	RUN_ENTRY_NSEC constant is added for `run_set_entry';
	(struct run_entry) `nsec' field is added. The padding is reduced to
	  3 bytes;
	(run_virtual_start) the `nsec' parameter is added;
	(run_virtual_stop) the same as above;
	(run_find) new function prototype is added.

	* runlog.c:
	(append_record) `nsec' parameter is added to pass the nanosecond
	  component of the timestamp;
	  nanosecond component is considered when inserting a new run;
	  attempt to insert a run in the middle of the runlog is failed,
	  if there are transient runs following the insertion point;
	(run_add_record) `nsec' parameter is added to pass the nanosecond
	  component of the timestamp;
	  use of `append_record' is updated;
	  possible failure of `append_record' is handled;
	(run_set_entry) `nsec' field is handled;
	(run_virtual_start) parameter `nsec' is added to pass the nanosecond
	  component of the timestamp;
	  use of `append_record' is updated;
	  possible failure of `append_record' is handled;
	(run_virtual_stop) the same as above;
	(runlog_check) the `nsec' field is handled;
	(build_indices) check, that `ut_table' is not NULL is added
	  before freeing its elements;
	(run_find) a new function to find a run in the given range of runs
	  by matching user_id, language_id or problem_id.

	* protocol.h:
	PROT_SERVE_STATUS_MAGIC is renamed to PROT_SERVE_STATUS_MAGIC_V1;
	struct prot_serve_status is renamed to struct prot_serve_status_v1;
	PROT_SERVE_STATUS_MAGIC_V2 is added;
	(struct prot_serve_status_v2) is added. The size of structure is
	  128 bytes;
	new commands: PRIV_DOWNLOAD_RUN, PRINT_SUSPEND, PRINT_RESUME,
	  COMPARE_RUNS;
	(struct prot_serve_pkt_view) field `item2' is added - used by
	  COMPARE_RUNS command.

	* printing.c: "userlist.h" is included;
	(print_banner_page) `location' field of the participant data is
	  printed to the banner page.

	* prepare.h:
	(struct section_global_data) fields `diff_work_dir', `diff_path',
	  `stand_success_attr' are added;
	(struct section_language_data) field `binary' is added.

	* prepare.c:
	new global configuration variables `diff_work_dir', `diff_path',
	  `stand_success_attr' are added;
	new language configuration variable `binary' is added;
	(set_defaults) `diff_work_dir', `diff_path' are handled;
	(create_dirs) `diff_work_dir' is created.

	* master_html.c:
	(write_priv_source) the nanosecond component of the submission time
	  is printed;
	  "Download run" reference is printed;
	  "Compare runs" button is printed;
	  if the language is marked as binary, the source code is not printed;
	(write_raw_source) new function to print the source of the run in the
	  raw form (without any control elements with content type
	  text/plain or application/octet-stream).

	* master.c:
	(print_printing_suspend_button) a new function to print printing
	  suspend/printing resume button;
	(view_source_if_asked) use of `serve_clnt_view' is updated as this
	  function now accepts one more parameter;
	(view_report_if_asked) the same as above;
	(view_teams_if_asked) the same as above;
	(action_dump_runs) the same as above;
	(action_write_xml_runs) the same as above;
	(action_export_xml_runs) the same as above;
	(action_dump_standings) the same as above;
	(action_submit_run) `cgi_param_bin' is used instead of `cgi_param',
	  so arbitrary (may be binary) data may be passed to the server;
	  use of `serve_clnt_submit_run' is updated;
	(action_print_suspend) new function to handle the corresponding
	  action;
	(action_print_resume) new function;
	(action_priv_download_run) new function;
	(action_compare_runs) new function;
	(view_clar_if_asked) use of `serve_clnt_view' is updated as this
	  function now accepts one more parameter;
	(main) new actions PRINT_SUSPEND, PRINT_RESUME, PRIV_DOWNLOAD_RUN,
	  COMPARE_RUNS are supported;
	  the printing suspend/resume button is generated.

	* makefile:
	INST_PATH variable is added to designate the installation path.

	* html.h: copyright notice is updated;
	(new_write_user_runs) parameter `printing_suspended' is added;
	(write_team_page) parameter `printing_suspended' is added;
	(write_raw_source) new function prototype added.

	* html.c:
	(new_write_user_runs) `printing_suspended' parameter is added;
	  if `printing_suspended' parameter is TRUE, the "Print sources"
	  option is disabled;
	(do_write_standings) the "Last success" information is generated;
	(write_team_page) `printing_suspended' parameter is added;
	  the value of the parameter is then passed to `new_write_user_runs'.

	* files.make: diff.[ch] are added.

	* clntutil.c: copyright notice is updated;
	server status variables `server_printing_enabled',
	  `server_printing_suspended' are added;
	(client_check_server_status) server status file of both versions
	  (v1 and v2) is supported.
	(client_print_server_status) "Print requests are suspended" message
	  is printed.

	* clean-users.c: copyright notice is updated;
	(struct user_stat) fields `never_clean' and `virt_contests' are added;
	(main) `never_clean' field is copied from the userlist information;
	  empty runlogs are properly supported;
	  for each VIRTUAL_START/VIRTUAL_STOP event the number of virtual
	  contest is stored in the `virt_contests' list of the `user_stat';
	  `never_clean' flag is honored in the final statistics table;
	  list of all the virtual contests for all users, which have only
	  VIRTUAL_START/VIRTUAL_STOP events is printed.

2004-03-26  Alexander Chernov  <cher@ispras.ru>

	* edit-userlist.c: copyright notice is updated;
	ncurses header files are included without directory ncurses, for
	  example <ncurses.h> is included instead of <ncurses/ncurses.h>;
	editing of `never_clean' and `location' fields is supported;
	(display_user) editing of `never_clean' and `location' fields is
	  supported;
	(user_match) `location' field is checked.

	* clntutil.h: copyright notice is updated;
	new status variables added: `server_printing_enabled' and
	  `server_printing_suspended'.

	* client_actions.h:
	new actions added: PRIV_DOWNLOAD_RUN, PRINT_SUSPEND, PRINT_RESUME,
	  COMPARE_RUNS.

	* cgi.h: copyright notice is updated;
	<stdlib.h> is included for `size_t' type;
	(cgi_param_bin) new function prototype added;
	(cgi_nparam_bin) new function prototype added.

	* cgi.c: copyright notice is updated;
	maximal size of data read from the client is increased to 1MB;
	(cgi_param_bin) a new function to return the value of the given
	  CGI data variable. The data size is returned separately from
	  the data pointer itself. This function may be used to read
	  binary data from the client;
	(cgi_nparam_bin) a new function to return the value of the given
	  CGI data variable by the variable name prefix.

	* serve_clnt.h:
	(serve_clnt_submit_run) new parameter `run_size' is added to
	  allow passing arbitrary binary data to the server;
	(serve_clnt_view) added parameter `item2', which is used
	  currently for the run comparison.

	* sformat.c: copyright notice is updated;
	(sformat_message) new format specifier `%ML' is supported to
	  print the value of the `location' field of the team
	  description.

	* team.c:
	(submit_if_asked) explicit `prog_size' parameter is calculated
	  and passed to `serve_clnt_submit_clar'. strlen() is no longer
	  used, thus arbitrary binary data may be passed to the server.

	* userlist-server.c: 
	(do_set_user_info) `location' field is supported;
	(do_list_users) `location' field is supported;
	(cmd_add_field) invalid use of `opcap_check' is fixed.

	* userlist.c: copyright notice is updated;
	(userlist_get_user_field_str) `never_clean' and `location' fields
	  are supported;
	(userlist_set_user_field_str) the same as above;
	(userlist_delete_user_field) the same as above.

	* userlist.h: copyright notice is updated;
	new constants for tag `location' and attribute `never_clean' are
	  added;
	constants USERLIST_NN_NEVER_CLEAN and USERLIST_NN_LOCATION are added;
	(struct userlist_user) field `never_clean' is added;
	  field `location' is added.

	* userlist_xml.c: copyright notice is updated;
	(node_free) the new `location' field is properly freed;
	(do_parse_user) `never_clean' attribute is supported;
	  `location' element is supported;
	(unparse_user) `never_clean' attribute is supported;
	  `location' element is also supported.

	* diff.c, diff.h: initial revision

2004-02-29  Alexander Chernov  <cher@ispras.ru>

	* revinfo.c: copyright notice is updated;
	new global variable `variable_prefix' is added;
	(write_output) the global variable `variable_prefix' is used to
	  generate the names of the variables in the generated code.
	  The default value is "compile";
	(main) new option "-P" is supported to define the `variable_prefix'
	  variable (see above).

	* mkChangeLog.c: copyright notice is updated;
	(main) `.cvsignore', `NEWS', `NEWS.RUS' are also ignored.

2004-02-18  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po, NEWS, NEWS.RUS: *** empty log message ***

	* prepare.c:
	new global configuration variables `a2ps_args' and `lpr_args' are
	  added.

	* prepare.h:
	(struct section_global_data) new fields `a2ps_args' and `lpr_args'
	  are added.

	* printing.c:
	(do_print_run) the global configuration variables `a2ps_args' and
	  `lpr_args' are supported.

	* team.c: (request_printing_if_asked) unused variable `r' is removed.

	* html.c:
	(new_write_user_runs) "Print" column is generated, if the global
	  configuration variable `enable_printing' is set to true;
	(new_write_user_source_view) the compressed archive entry is
	  preferred;
	(new_write_user_report_view) the compressed archive entry is
	  preferred.

	* master.c:
	(print_judging_mode_button) now accepts a flag, whether "Set judging
	  mode" or "Set accepting mode" button should be displayed;
	(change_status_if_asked) parameters to `serve_clnt_edit_run' are
	  updated;
	(change_status) the same as above;
	(change_problem) the same as above;
	(change_language) the same as above;
	(change_variant) the same as above;
	(action_run_change_pages) a new functon to edit the `pages' field
	  value;
	(change_user_id) parameters to `serve_clnt_edit_run' are updated;
	(change_user_login) the same as above;
	(change_imported) the same as above;
	(change_hidden) the same as above;
	(change_tests) the same as above;
	(change_score) the same as above;
	(action_set_accepting_mode) a new function to set "Accepting mode"
	  for the OLYMPIAD contests;
	(action_priv_print_run) a new function to print a source for a run;
	(main) new actions `SET_ACCEPTING_MODE' and `RUN_CHANGE_PAGES'
	  are handled.

	* master_html.c: copyright notice is updated;
	(write_priv_source) compressed archive entry is preferred;
	  `pages' field and change control is generated;
	  `Print' button is generated to print the run.

	* prepare.c:
	global configuration variables `print_work_dir', `a2ps_path',
	  `lpr_path', `enable_printing', `team_page_quota' are added;
	problem configuration variable `accept_partial' is added;
	(global_init_func) `team_page_quota' is initialized to -1 (undefined);
	(problem_init_func) `accept_partial' is initialized to -1 (undefined);
	(set_defaults) new configuration variables are initialized;
	(create_dirs) `print_work_dir' is created.

	* prepare.h:
	(struct section_global_data) new fields `print_work_dir', `a2ps_path',
	  `lpr_path', `enable_printing', `team_page_quota';
	(struct section_problem_data) new field `accept_partial'.

	* run.c: copyright notice is updated;
	(generate_report) the `OLYMPIAD' score system is handled in the same
	  way, as the `KIROV' score system;
	(generate_team_report) the same as above;
	(run_tests) `accept_partial' parameter is added;
	  if `accept_partial' is set to TRUE, in the accepting mode of the
	  `OLYMPIAD' contest the submit is marked as accepted, if the submit
	  is not even passed all acceptance tests;
	(do_loop) added signal mask manipulation to allow terminating of the
	  program between testing of solutions;
	  `accept_partial' parameter is read from the compile packet and
	  passed to `do_loop';
	(check_config) the summ of all the test scores is allowed to be 0.

	* serve.c:
	(priv_submit_run) the capability name is now `SUBMIT_RUN' instead of
	  `SUBMIT_RUNS';
	(priv_command_0) the capability `PRINT_RUN' is checked for printing.

	* userlist-server.c:
	(flush_database) the stream descriptor `f' is closed, if the XML
	  unparsing failed. Previously there was a resource leak.

2004-02-17  Alexander Chernov  <cher@ispras.ru>

	* filter_tree.c: copyright notice is updated;
	(filter_tree_result_str) VIRTUAL_START, VIRTUAL_STOP, and EMPTY
	  run statuses are supported;
	(filter_tree_eval_node) conversion from string to status_t for
	  `VS' (virtual start), `VT' (virtual stop), and `EM' (empty)
	  run statuses is supported.

	* filter_scan.lex: copyright notice is updated;
	new run status constants `VS' (virtual stop) and `VT' (virtual start)
	  are scanned.

	* opcaps.h: copyright notice is updated;
	SUBMIT_RUNS capability renamed to SUBMIT_RUN;
	PRINT_RUN capability added.

	* opcaps.c: copyright notice is updated;
	SUBMIT_RUNS renamed to SUBMIT_RUN;
	PRINT_RUN capability is added.

2004-02-16  Alexander Chernov  <cher@ispras.ru>

	* files.make: printing.[ch] files are added.

	* makefile: copyright notice is updated.

	* protocol.c: copyright notice is added;
	(error_map) texts for `PAGES_QUOTA' and `ALREADY_PRINTED' errors added.

	* protocol.h: copyright notice is updated;
	new commands added: `SET_ACCEPTING_MODE', `PRIV_PRINT_RUN',
	  `PRINT_RUN';
	new error codes added: `PAGES_QUOTA', `ALREADY_PRINTED';
	new runlog editing flag: `RUN_PAGES_SET';
	(struct prot_serve_pkt_run_info) new field `pages' added.

	* runlog.c: 
	(do_write) EINTR error is ignored (operation restarted);
	  the error code is returned in case of error;
	(do_read) EINTR error is ignored;
	  the error code (negated) is returned in case of error;
	  EPIPE is returned in case of unexpected EOF;
	(run_set_entry) `pages' field editing is supported;
	(run_virtual_start) the runlog entry number is returned (instead of -1)
	  in case of successful completion;
	(run_virtual_stop) the same as above;
	(run_get_pages) a new function to return the value of the `pages'
	  field for the given run;
	(run_set_pages) a new function to set the value of the `pages' field
	  for the given run;
	(run_get_total_pages) a new function to return the total amount of
	  pages printed for the given user.

	* client_actions.h: copyright notice is updated;
	new client actions added: `SET_ACCEPTING_MODE', `PRINT_RUN',
	  `PRINT_PRIV_RUN', `RUN_CHANGE_PAGES'.

	* archive_paths.h: copyright notice is updated;
	(archive_remove) the third parameter (gzip_preferred) is removed.

	* archive_paths.c: copyright notice is updated;
	(archive_dir_prepare) added removal of all the possible files for the
	  given archive entry;
	(archive_remove) completely rewritten to remove all possible files
	  corresponding for the given archive entry.

	* runlog.h: copyright notice is updated;
	new flag `RUN_ENTRY_PAGES' added;
	(struct run_entry) new field `pages' is added;
	(run_get_pages) new function - returns the number of pages printed
	  for the given run;
	(run_set_pages) new function - sets the number of pages printed for
	  the given run;
	(run_get_total_pages) returns the total amount of pages printed for
	  the given user.

	* serve.c: "printing.h" is included;
	(move_files_to_insert_run) a new function to rename archive entries in
	  case, when a new submit is inserted into the middle of the runlog
	  database;
	(cmd_priv_submit_run) submits are actually allowed before the start
	  of the contest and after the end of the contest;
	  `move_files_to_insert_run' is called;
	(cmd_team_print) new function to support participant's run printing;
	(cmd_team_submit_run) `move_files_to_insert_run' is called;
	(cmd_command_0) `move_files_to_insert_run' is called after virtual
	  start and virtual stop events;
	(do_squeeze_runs) use of `archive_remove' is changed;
	(cmd_priv_command_0) switching to judging mode is enabled before the
	  end of the contest;
	  `SET_ACCEPTING_MODE' command is supported;
	  `PRIV_PRINT_RUN' command is supported;
	(cmd_edit_run) editing of `pages' field is supported;
	(read_compile_packet) the value of `accept_partial' global
	  configuration variable is passed to the `run' program;
	(packet_handlers) handlers for the new commands are added.

	* printing.c: 
	(do_print_run) a debugging print is commented out.

	* team.c: copyright notice is updated;
	(request_printing_if_asked) a new function to display a confirmation
	  dialog to print a run;
	(action_print_run) new function to issue a print request;
	(main) `request_printing_if_asked' and `action_print_run' functions
	  are used to support printing.

	* serve_clnt.h: copyright notice is updated;
	(serve_clnt_edit_run) the `pages' parameter is added.

	* userlist-server.c:
	(generate_random_password) easily misunderstood characters are never
	  generated. Such characters are `l', `I', '1', '0', 'O'.

2004-02-15  Alexander Chernov  <cher@ispras.ru>

	* printing.c, printing.h: initial revision

2004-01-09  Alexander Chernov  <cher@ispras.ru>

	* compile.c: copyright notice is updated;
	removed obsoleted descriptive comment;
	<errno.h>, <unistd.h> are included;
	(do_loop) error handling and recovery is improved. Instead of immediate
	  termination, the program sleeps for 5 seconds, and then tries to
	  repeat failed operation. In some cases the "Internal error"
	  is reported back to the contest server.

	* runlog.c: copyright notice is updated;
	(run_get_fog_period) a problematic assertion is commented out.

	* userlist-server.c:
	(cmd_priv_register_contest) some unreachable code is removed;
	(flush_database) the temporary file is removed, if the write
	  failed.

	* cr_serialize.c: copyright notice is updated;
	(cr_serialize_init) the negated error code (taken from errno) is
	  reported in case of error;
	(cr_serialize_lock) the negated error code (taken from errno) is
	  reported in case of error;
	  a non blocking lock attempt is performed, if the attempt fails,
	  a regular blocking locking is requested, and a corresponding
	  message is written to the log;
	(cr_serialize_unlock) the negated error code (taken from errno) is
	  reported in case of error.

2004-01-05  Alexander Chernov  <cher@ispras.ru>

	* html.c:
	(count_unread_clars) added a check for clars from a particular
	  parcicipant (from > 0) to judges (to == 0). Such clars are not
	  counted;
	(write_team_page) the "unread message(s)" message is displayed even
	  if the contest is not started.

2004-01-03  Alexander Chernov  <cher@ispras.ru>

	* userlist-server.c: copyright notice is updated;
	(do_backup) the backup copies of the userlist database are written in
	  gzip compressed format.

	* html.c:
	(do_write_kirov_standings) the new `hidden' problem configuration
	  variable is supported;
	(do_write_standings) the same as above.

	* master.c: copyright notice is updated;
	(display_enter_password_2) a new functon to display
	  "login-password-contest_id" prompt;
	(display_enter_password) previously commented code is removed;
	  inserted missing "<tr>";
	  the "Submit" button is moved to second column;
	(initialize) `display_enter_password_2' is called, if the contest_id
	  variable is not set.

	* prepare.c: new problem configuration variable `hidden' is added;
	(problem_init_func) the `hidden' variable is initialized;
	(set_defaults) the `hidden' variable is processed;
	  the default initialization for the `variable_full_score' is fixed.

	* prepare.h: 
	(struct section_problem_data) new field `hidden' is added.

2004-01-02  Alexander Chernov  <cher@ispras.ru>

	* copyright.c: copyright notice is updated;
	(make_copyright) the copyright message is updated to year 2004.

	* serve.c: the copyright notice is updated;
	"team_extra.h" is included;
	(main) the team client state files are flushed using the
	  `team_extra_flush' function.

	* prepare.h: the copyright notice is updated;
	(struct section_global_data) new field `team_extra_dir' is added.

	* prepare.c: copyright notice is updated;
	new global configuration variable `team_extra_dir' is added;
	(set_defaults) the new `team_extra_dir' configuration variable
	  is processed;
	(create_dirs) the `team_extra_dir' directory is created.

	* html.c: copyright notice is updated;
	"team_extra.h" is included;
	(team_clar_flags) a new function, which generates the status string
	  for each clarification report. This string is shown in the "Status"
	  column of the clarification table. The function returns "N", if the
	  message was not yet seen by the participant, etc.
	(count_unread_clars) a new function, which counts the number of
	  messages, which are not yet seed by the participant;
	(new_write_user_clars) `team_clar_flags' is used instead of
	  `clar_flags_html';
	(new_write_user_clar) the requested message is marked as seen by the
	  participant;
	(write_team_page) the number of unread messages is reported in the
	  contest status section.

	* files.make: copyright notice is updated;
	team_extra.c, team_extra_xml.c are added to the list of C files;
	team_extra.h is added to the list of H files.

	* team_extra_xml.c, team_extra.h, team_extra.c: Initial revision

2003-12-29  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2003-12-29  Alexander Chernov  <cher@ispras.ru>

	* NEWS, NEWS.RUS: *** empty log message ***

	* master.c:
	(operation_status_page) an extra paramter `run_id' is accepted. If
	  this parameter is set to >= 0 value, the autorefreshing refreshes
	  to the "View source" page for the given run;
	(start_if_asked) usage of `operation_status_page' is updated;
	(stop_if_asked) the same;
	(action_reload_server) the same;
	(update_standings_if_asked) the same;
	(changedur_if_asked) the same;
	(sched_if_asked) the same;
	(change_status_if_asked) the same;
	(change_status) the `operation_status_page' is called so that the
	  current page remains the source view page for the given run;
	(change_problem) the same;
	(change_language) the same;
	(change_variant) the same;
	(change_user_id) the same;
	(change_user_login) the same;
	(change_imported) the same;
	(change_hidden) the same;
	(change_tests) the same;
	(change_score) the same;
	(change_readonly) the same;
	(action_submit_run) usage of `operation_status_page' is updated, the
	  `run_id' parameter is passed as "undefined" (-1);
	(confirm_clear_run) the same as above;
	(do_contest_reset_if_asked) the same as above;
	(do_clear_team_passwords) the same as above;
	(do_suspend_if_asked) the same as above;
	(do_resume_if_asked) the same as above;
	(action_test_suspend) the same as above;
	(action_test_resume) the same as above;
	(action_set_judging_mode) the same as above;
	(do_rejudge_all_if_asked) the same as above;
	(action_judge_suspended) the same as above;
	(action_squeeze_runs) the same as above;
	(action_continue) the same as above;
	(action_clear_run) the same as above;
	(action_reset_filter) the same as above;
	(action_toggle_visibility) the same as above;
	(action_toggle_ban) the same as above;
	(action_toggle_lock) the same as above;
	(do_rejudge_problem_if_asked) the same as above;
	(send_msg_if_asked) the same as above;
	(send_reply_if_asked) the same as above.

	* html.c:
	(do_write_kirov_standings) the new `variable_full_score' problem
	  configuration variable is supported.

	* master_html.c:
	(write_priv_users) added a hyperlink, which returns to the main page
	  and sets the filter expression to "uid == UID" to the Team ID column
	  of the participant list.

	* prepare.c:
	A new problem configuration variable `variable_full_score' is added;
	(problem_init_func) the `variable_full_score' is initialized to -1;
	(set_defaults) the `variable_full_score' is processed.

	* prepare.h:
	(struct section_problem_data) a new configuration variable
	  `variable_full_score' is added.

2003-12-26  Alexander Chernov  <cher@ispras.ru>

	* files.make: NEWS and NEWS.RUS are added to OTHERFILES.

	* filter_eval.c:
	(do_eval) support for the new tree node types is implemented:
	  IMPORTED, HIDDEN, READONLY, VARIANT, RAWVARIANT, CURIMPORTED,
	  CURHIDDEN, CURREADONLY, CURVARIANT, CURRAWVARIANT.

	* filter_expr.y: new constructs are handled:
	  imported[(run_id)], curimported, hidden[(run_id)], curhidden,
	  readonly[(run_id)], curreadonly, varant[(run_id)], curvariant,
	  rawvariant[(run_id)], currawvariant.

	* filter_scan.lex:
	new tokens are handled: imported, curimported, hidden, curhidden,
	  readonly, curreadonly, variant, curvariant, rawvariant,
	  currawvariant.

	* master.c:
	(display_enter_password) the `sid_mode' variable is moved to a
	  hidden field and always have value of 2;
	(change_status_if_asked) the `serve_clnt_edit_run' now accepts an
	  additional parameter, so the call is updated;
	(change_status) the same as above;
	(change_problem) the same as above;
	(change_language) the same as above;
	(change_variant) the same as above;
	(change_user_id) the same as above;
	(change_user_login) the same as above;
	(change_imported) the same as above;
	(change_hidden) the same as above;
	(change_tests) the same as above;
	(change_score) the same as above;
	(change_readonly) a new function to support editing of `is_readonly'
	  field;
	(main) the new action `ACTION_RUN_CHANGE_READONLY' is handled.

	* master_html.c:
	(write_priv_source) hyperlinks, which set up filter expressions,
	  are generated for IP-address, size, hash, user_id, problem,
	  variand, and language fields. Hyperlinks are only generated
	  in the `SID_URL' session mode, which is default;
	  editing is disabled, if the run has `is_readonly' field set;
	  editing of `is_readonly' field is supported;
	(write_runs_dump) `is_readonly' field is dumped.

	* misctext.c: <ctype.h> is included;
	(url_armor_string) a new function, which escapes-for-url character
	  strings. For example, string "a=b" is converted to "a%3db". Such
	  url-armored strings may be used to specify values directly in
	  URLs.

2003-12-25  Alexander Chernov  <cher@ispras.ru>

	* misctext.h: (url_armor_string) new function prototype is added.

	* prepare.c:
	new global configuration variable `disable_testing' is added;
	new problem configuration variable `disable_testing' is added;
	(problem_init_func) `disable_testing' field is initialized to -1;
	(set_defaults) new configuration variables are processed.

	* prepare.h:
	(struct section_global_data) field `disable_testing' is added;
	(struct section_problem_data) field `disable_testing' is added.

	* run.c:
	(do_loop) testing requests for problems with `disable_testing'
	  configuration variable set are rejected;
	(process_default_testers) problems with `disable_testing' configuration
	  variable set are ignored;
	(check_config) the same as above.

	* serve.c:
	(cmd_priv_submit_run) the new `disable_testing' problem configuration
	  variable is supported;
	(cmd_team_submit_run) the same as above;
	(cmd_priv_command_0) runs with `is_readonly' flag set cannot be
	  cleared;
	(cmd_edit_run) runs with `is_readonly' flag set cannot be edited,
	  except changing of `is_readonly' field;
	  editing of `is_readonly' field is supported;
	(rejudge_run) runs with `is_readonly' flag set are not rejudged;
	(do_rejudge_all) the same as above;
	(do_judge_suspended) runs, which problem has `disable_testing'
	  configuration variable set, are not rejudged;
	  runs with `is_readonly' flag set are not rejudged;
	(do_rejudge_problem) the same as above.

2003-12-22  Alexander Chernov  <cher@ispras.ru>

	* client_actions.h: new actions added: `ACTION_RUN_CHANGE_TESTS',
	  `ACTION_RUN_CHANGE_SCORE', `ACTION_RUN_CHANGE_READONLY'.

2003-12-21  Alexander Chernov  <cher@ispras.ru>

	* runlog_xml.c: new attribute `readonly' is added;
	(process_run_elements) new attribute `readonly' is handed;
	(unparse_runlog_xml) new attribute `readonly' is generated.

	* runlog_import.c:
	(runlog_import_xml) the new `is_readonly' field is supported.

	* runlog.h: new runlog entry editing constant `RUN_ENTRY_READONLY';
	(struct run_entry) field `is_readonly' is added;
	(run_is_readonly) a new function prototype.

	* runlog.c:
	(run_change_status) the status of runs with `is_readonly' flag set
	  cannot be changed;
	(run_set_entry) runs with `is_readonly' flag set cannot be edited
	  (except to clear the flag);
	  `is_readonly' field editing is supported;
	(run_is_readonly) a new function, which returns whether the run has
	  `is_readonly' flag set;
	(run_clear_entry) runs with `is_readonly' flag set cannot be cleared;
	(runlog_check) `is_readonly' field is checked.

	* protocol.h: new error code `SRV_ERR_READONLY_RUN' is added;
	new runlog entry field constant `PROT_SERVE_RUN_READONLY_SET' added;
	(struct prot_serve_pkt_run_info) field `is_readonly' is added.

	* protocol.c: message for SRV_ERR_READONLY_RUN is added.

	* serve_clnt.h:
	(serve_clnt_edit_run) new parameter `is_readonly' is added.

2003-12-14  Alexander Chernov  <cher@ispras.ru>

	* master.c:
	(change_status_if_asked) `serve_clnt_edit_run' usage is updated;
	(change_language) the same as above;
	(change_problem) the same as above;
	(change_variant) the same as above;
	(change_user_id) the same as above;
	(change_user_login) the same as above;
	(change_imported) the same as above;
	(change_hidden) the same as above;
	(change_tests) new function to implement editing of `test' field of
	  runlog entries;
	(change_score) new function to implement editing of `score' field of
	  runlog entries;
	(main) new actions `ACTION_RUN_CHANGE_TESTS', `ACTION_RUN_CHANGE_SCORE'
	  are supported.

	* master_html.c:
	(print_nav_buttons) new parameters added: `run_id' to be used for
	  "View source" and "View report" navigation,
	  `t5' text for "View source" navigation, if NULL, this navigation
	  is disabled;
	  `t6' text for "View report" navigation, disabled if NULL;
	  so, "View source", "View report" navigation is supported;
	(write_all_runs) use of `print_nav_buttons' is updated;
	(write_all_clars) the same as above;
	(write_priv_standings) the same as above;
	(write_priv_source) editing of "Tests" and "Score" fields is
	  implemented;
	  "View report" navigation is supported;
	(write_priv_report) "View source" navigation is supported;
	(write_priv_clar) use of `print_nav_buttons' is updated;
	(write_priv_users) the same as above.

	* protocol.h:
	constants `PROT_SERVE_RUN_TESTS_SET', `PROT_SERVE_RUN_SCORE_SET'
	  are added to enable editing of `test' and `score' runlog fields;
	(struct prot_serve_pkt_run_info) fields `tests' and `score' added.

	* register.c:
	(action_register_for_contest) use of `userlist_clnt_set_info' is
	  updated: the contest identifier is passed to it.

	* serve.c:
	(cmd_edit_run) editing of `test' and `score' fields is supported.

	* serve_clnt.h:
	(serve_clnt_edit_run) new parameters `tests' and `score' are added.

	* userlist-server.c:
	(cmd_check_cookie) removed prevously commented code;
	(do_set_user_info) parameter `cnts' added to enable strict member
	  limits check;
	  strict member limits check is implemented, i.e. it is not allowed
	  to add a member, if the user already has the maximal number of
	  members of that kind;
	(cmd_set_user_info) lookup for the contest with the contest_id from
	  the client is added. The contest descriptor is then passed to
	  `do_set_user_info'.

	* userlist_clnt.h:
	(userlist_clnt_set_info) parameter `contest_id' is added.

	* userlist_proto.h:
	(struct userlist_pk_set_user_info) field `contest_id' is added.

2003-12-09  Alexander Chernov  <cher@ispras.ru>

	* NEWS.RUS, ejudge.ru_RU.KOI8-R.po, NEWS: *** empty log message ***

2003-12-09  Alexander Chernov  <cher@ispras.ru>

	* prepare.h:
	(struct section_global_data) new fields: `team_enable_ce_view',
	  `team_show_judge_report', `use_gzip', `min_gzip_size',
	  `use_dir_hierarchy';
	(struct section_problem_data) new fields: `team_enable_ce_view',
	  `team_show_judge_report'.

2003-12-04  Alexander Chernov  <cher@ispras.ru>

	* html.c: (new_write_user_runs) `team_enable_ce_view' is handled;
	  attempts are not counted for hidden runs;
	  imported runs are marked with "*" in the run_id column;
	  hidden runs are marked with "#";
	  variant is looked in the variant map, only if the variant is
	  not specified in the runlog entry;
	  if `team_enable_ce_view' is set, "Report view" link is enabled
	  for runs failed due to compilation error;
	(do_write_kirov_standings) hidden runs are ignored;
	(do_write_standings) hidden runs are ignored;
	(do_write_public_log) hidden runs are ignored;
	  variant is looked up in the variant map, only if the variant is
	  not specified in the runlog entry;
	(new_write_user_report_view) `team_enable_ce_view' and
	  `team_show_judge_report' configuration variables are handled.

	* html.h: "opcaps.h" is included;
	(write_master_page) `pcaps' parameter is added;
	(write_priv_source) the same as above;
	(write_priv_report) the same as above;
	(write_priv_clar) the same as above;
	(write_priv_users) the same as above.

	* master.c:
	(print_testing_suspend_button) a new function to print the
	  "Suspend testing" and "Resume testing" buttons;
	(change_status_if_asked) use of `serve_clnt_edit_run' is updated -
	  two new parameters added;
	(change_status) the same as above;
	(change_problem) the same as above;
	(change_language) the same as above;
	(change_user_id) the same as above;
	(change_user_login) the same as above;
	(change_variant) a new function to send "Change variant" request;
	(change_hidden) a new functio to send "Change is_hidden flag" request;
	(action_submit_run) a new function to send a privileged submit;
	(confirm_judge_suspended) a new function to display judge suspended
	  runs confirmation dialog;
	(action_test_suspend) a new function to suspend testing;
	(action_test_resume) a new function to resume testing;
	(action_judge_suspended) a new function to judge suspended runs;
	(main) new actions handled: `ACTION_TEST_SUSPEND',`ACTION_TEST_RESUME',
	  `ACTION_JUDGE_SUSPENDED_1', `ACTION_JUDGE_SUSPENDED_2',
	  `ACTION_RUN_CHANGE_VARIANT', `ACTION_RUN_CHANGE_HIDDEN',
	  `ACTION_SUBMIT_RUN';
	  "Suspend/Resume testing" button is displayed.

	* master_html.c:
	(write_all_runs) attempts are not counted for "hidden" runs;
	  "hidden" runs are marked with "#" character;
	  variant is looked up in variant map only if `variant' field
	  in run description is not set;
	  "Judge suspended runs" button is added;
	  "Submit a solution" dialog is added;
	(write_master_page) a new `pcaps' parameter is added, but is not
	  yet used;
	(write_priv_source) the same as above;
	  variant change button is added;
	  hidden status change button is added;
	(write_priv_report) a new parameter `pcaps' is added, but not yet used;
	(write_priv_clar) the same as above;
	(write_priv_users) the same as above;
	(write_runs_dump) `is_imported', `variant', `is_hidden' fields are
	  printed.

	* prepare.c:
	(GLOBAL_ALIAS) a new macro to define a global configuration variable
	  as an alias to another global configuration variable;
	new global configuration variable `stand_freeze_time' - alias to
	  `board_fog_time';
	new global configuration variable `stand_melt_time' - alias to
	  `board_unfog_time';
	new global configuration variables `team_enable_ce_view' and
	  `team_show_judge_report';
	new problem configuration variables `team_enable_ce_view' and
	  `team_show_judge_report';
	(global_init_func) `board_fog_time' is explicitly initialized;
	(problem_init_func) `team_enable_ce_view', `team_show_judge_report',
	  `test_score' are explicitly initialized;
	(parse_variant_map) debugging output is commented out;
	(set_defaults) "undefined" value of `board_fog_time' is now -1,
	  so function updated;
	  problem configuration variables `team_enable_ce_view' and
	  `team_show_judge_report' are handled;
	  `test_score' problem configuration variable is allowed to be 0.

	* runlog.c:
	(run_add_record) two new parameters are added: `variant' is the
	  problem variant, `is_hidden' is "hidden" flag for the run;
	  contest start and stop time is checked only for non-hidden runs;
	  virtual participation status is set only for non-hidden runs;
	(run_get_param) function is completely removed;
	(run_get_record) function is completely removed;
	(run_get_attempts) a "hidden" run is not counted as an attempt;
	(run_check_duplicate) variant match is required;
	(run_set_entry) `variant' and `is_hidden' fields are handled;
	  contest start and stop time is checked only for non-hidden runs;
	  a run cannot have `is_hidden' and `is_imported' flags both set;
	(runlog_check) check for "hidden" runs is relaxed;
	(build_indices) "hidden" runs are ignored.

	* runlog_import.c:
	(runlog_import_xml) "hidden" runs are handled in merging: hidden
	  runs are disallowed in external (input) runlog; "hidden"
	  local runs are never checked for correspondence in input runs;
	  `variant' field is handled in the same manner, as `test' field,
	  i. e. authoritative run may update `variant' field.

	* serve.c:
	(cmd_view) fixed bug introduced in the previous CVS revision:
	  `opcaps_check' accepts capability set as the first parameter,
	  not the user_id.

	* runlog.h:
	(run_add_record) two new parameters are added: `variant', `is_hidden';
	new constants: `RUN_ENTRY_VARIANT', `RUN_ENTRY_HIDDEN';
	(struct run_entry) new fields `variant' and `is_hidden' are added.

	* runlog_xml.c: new attribute `variant' is added;
	(process_run_elements) `variant' attribute is handled;
	(unparse_runlog_xml) hidden runs are ignored;
	  `variant' attribute is generated.

	* serve.c:
	(update_status_file) new fields `testing_suspended', `freeze_time'
	  are written to the status file;
	  `continuation_enabled' is written even if the duration is finite;
	(get_cnts_caps) new function, which returns the full capability
	  set of the given user for the current contest;
	(cmd_master_page) `get_cnts_caps' is used to obtain the full
	  capability set, which is further passed to `write_master_page';
	(cmd_view) `get_cnts_caps' is used to obtain the full capability
	  set, which is further passed to `write_priv_source',
	  `write_priv_report', `write_priv_clar', `write_priv_users';
	  `opcaps_check' function is used instead of `check_cnts_caps',
	  because the full capability set is already loaded;
	(cmd_priv_submit_run) a new function, which submits a run from a
	  privileged user (master or judge), the run is stored in the
	  run database with `hidden' flag;
	(cmd_team_submit_run) `variant' is not allowed to be explicitly
	  specified by a user;
	  `run_add_record' usage is updated due to two new parameters
	  (variant, is_hidden);
	  `testing_suspended' flag is handled: the run is marked as `ACCEPTED'
	  and is not scheduled for compilation;
	(cmd_priv_command_0) `SRV_CMD_TEST_SUSPEND' command is handled;
	  `SRV_CMD_TEST_RESUME' command is handled;
	  `SRV_CMD_JUDGE_SUSPENDED' command is handled;
	  `SRV_CMD_DURATION' is allowed after the end of the contest, if
	  `enable_continue' global configuration variable is set;
	  refuse to change infinite contest duration, or set infinite contest
	  duration;
	  allow to reduce the contest duration, but if the new duration is
	  larger, that the duration of the running contest (i.e. decrease
	  is disallowed, if it cause immediate stop of the contest);
	  `SRV_CMD_CONTINUE' contest continuation is allowed, if the contest
	  duration permits;
	(cmd_edit_run) new fields `is_hidden' and `variant' are handled;
	  `variant' is checked for consistency against the total number
	  of variants for the given problem;
	(read_compile_packet) the problem variant is looked up in the
	  variant table, only if the variant is not specified explicitly
	  in the runlog;
	(do_judge_suspended) a new function to judge all the runs with
	  `ACCEPTED' status;
	(packet_handlers) handlers for `SRV_CMD_TEST_SUSPEND',
	  `SRV_CMD_TEST_RESUME', `SRV_CMD_JUDGE_SUSPENDED',
	  `SRV_CMD_PRIV_SUBMIT_RUN' are added.

	* filter_scan.lex:
	two new tokens: `status', `curstatus', which are aliases for
	  `result' and `curresult'.

	* protocol.h:
	(struct prot_serve_status) new field `testing_suspended';
	new serve commands: TEST_SUSPEND, TEST_RESUME, JUDGE_SUSPENDED;
	new constant `PROT_SERVE_RUN_HIDDEN_SET' to mark `is_hidden'
	  field;
	(struct prot_serve_pkt_run_info) new field `is_hidden'.

	* run.c: 
	(check_config) problem test_score == 0 is allowed.

	* serve_clnt.h:
	(serve_clnt_submit_run) two new parameters added: `cmd', `variant';
	(serve_clnt_edit_run) two new parameters added: `variand',
	  `is_hidden'.

	* team.c:
	(submit_if_asked) use of `serve_clnt_submit_run' is changed, because
	  of two new parameters.

	* clntutil.c:
	type of `server_cur_time', `server_start_time', `server_sched_time',
	  `server_duration', `server_stop_time' is changed to time_t.

	* clntutil.h: new global variables added:
	  `server_freeze_time', `server_testing_suspended';
	type of `server_cur_time', `server_start_time', `server_sched_time',
	  `server_duration', `server_stop_time' is changed to time_t.

	* clntutil.c:
	new global variable `server_freeze_time' to store the standings
	  freeze time;
	new global variable `server_testing_suspended' to store this flag;
	(client_check_server_status) `server_testing_suspended',
	  `server_freeze_time' are read from the server;
	(client_print_server_status) if testing is suspended on the server,
	  the corresponding message is printed;
	  "Client time" information is printed only for privileged users;
	  "Continue" button is printed for contests with limited duration, if
	  duration permits;
	  "Change duration" is printed always, if `server_continuation_enabled'
	  flag is set, even after the end of the contest;
	  `server_freeze_time' is printed, if set.

	* client_actions.h:
	new actions added: `RUN_CHANGE_VARIANT', `RUN_CHANGE_HIDDEN',
	  `TEST_SUSPEND', `TEST_RESUME', `JUDGE_SUSPENDED_1',
	  `JUDGE_SUSPENDED_2'.

2003-12-03  Alexander Chernov  <cher@ispras.ru>

	* teamdb.c:
	(teamdb_refresh) if no participants are yet registered for the contest,
	  return gracefully instead of aborting on attempt to allocate 0 bytes.

	* contests.c:
	<observer_access> element is removed, because observer functionality
	  was not implemented;
	(parse_contest) `observer_access' tag is removed;
	(contests_check_ip) `observer_access' support is removed;
	(contests_check_observer_ip) function is removed.

	* contests.h:
	<observer_access> element is removed, because observer functionality
	  was not implemented;
	(struct contest_desc) `observer_access' field is removed;
	(contests_check_observer_ip) function prototype is removed.

	* protocol.c: copyright notice is updated;
	(priv_level_map) `observer' constant is removed.

	* protocol.h:
	(struct prot_serve_status) new field `freeze_time' is added to
	  pass the standings freeze time to clients;
	new command `SRV_CMD_PRIV_SUBMIT_RUN' is added;
	(struct prot_serve_pkt_submit_run) new field `variant' is added;
	new bit `PROT_SERVE_RUN_VARIANT_SET' is added;
	(struct prot_serve_pkt_run_info) new field `variant' is added.

2003-12-02  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* html.c: "archive_paths.h" is included;
	(new_write_user_source_view) `archive_make_read_path' is used to
	  compose the path to the archive entry;
	(new_write_user_report_view) the same as above.

	* master.c:
	(main) support for `PRIV_LEVEL_OBSERVER' privilege level is removed,
	  because the `observer' privilege level was never actually
	  implemented in ejudge.

	* master_html.c: "archive_paths.h" is included;
	(write_all_runs) two extra columns for virtual events and empty
	  record are not generated in judge mode;
	(write_priv_source) `archive_make_read_path' function is used to
	  compose the path to the archive entry;
	(write_priv_report) the same as above.

	* prepare.c:
	new global configuration variables: `use_gzip', `min_gzip_size',
	  `use_dir_hierarchy';
	(global_init_func) the new configuration variables are initialized
	  to "undefined" (-1) value;
	(set_defaults) the new configuration variables are handled.

	* runlog_import.c: "archive_paths.h" is included;
	(do_rename) function is removed because similar function
	  `archive_rename' is now in the "archive_paths.c";
	(rename_archive_files) `archive_rename' is used instead of
	  `do_rename'.

	* serve.c: "archive_paths.h" is included;
	(cmd_team_get_archive) `archive_make_read_path' is used to compose
	  an archive entry path to insert into the team's archive;
	(cmd_master_page) `PRIV_LEVEL_OBSERVER' is removed as `observer'
	  mode was never implemented;
	(cmd_priv_standings) the same as above;
	(cmd_message) the same as above;
	(cmd_team_submit_run) `archive_make_write_path', `archive_dir_prepare'
	  are used to save the submit into the proper place in the archive;
	(cmd_judge_command_0) `PRIV_LEVEL_OBSERVER' is removed as `observer'
	  mode was never implemented;
	(do_rename) function removed, since `archive_rename' function is
	  created in "archive_paths.c";
	(do_remove_archive_entry) function removed, since `archive_remove'
	  function is created in "archive_paths.c";
	(do_squeeze_runs) `archive_rename', `archive_remove' functions are
	  used;
	(read_compile_packet) `archive_make_write_path', `archive_dir_prepare'
	  functions are used to save the compilation log to proper place;
	(read_run_packet) `archive_make_write_path', `archive_dir_prepare'
	  are used to save the execution log to proper places;
	(queue_compile_request) `archive_make_read_path' is used to compose
	  the name of the archive entry;
	(rejudge_run) since `queue_compile_request' do not need run text
	  if the run is taken from the archive, NULL is passed in this
	  parameter.

2003-12-01  Alexander Chernov  <cher@ispras.ru>

	* fileutl.h:
	new `GZIP' bit is added to flag bits. This bit indicates, that
	  gzip compression/decompression should be performed;
	(generic_file_size) new function prototype.

	* makefile: `-lz' added to LDLIBS: many utilities now use zlib.

	* opcaps.c, opcaps.h:
	`SUBMIT_RUNS' capability is added instead of `OBSERVER_LOGIN'
	  (capability bit is 2).

	* protocol.h, userlist_proto.h:
	`PRIV_LEVEL_OBSERVER' privilege level constant is removed, since
	  the `observer' privilege level was never implemented.

	* files.make: archive_paths.[ch] are added.

	* userlist-server.c:
	(cmd_priv_login) support for `observer' privilege level is removed,
	  since this privilege level was never implemented;
	(cmd_priv_check_cookie) the same as above.

	* userlist.h:
	`PRIV_LEVEL_OBSERVER' constant is removed, since the `observer'
	  privilege level (never implemented) is removed.

	* userlist_xml.c:
	(parse_priv_level) `observer' privilege level is removed.

	* archive_paths.c, archive_paths.h: initial revision

2003-11-28  Alexander Chernov  <cher@ispras.ru>

	* files.make:
	Obsoleted files are removed from the lists of .c and .h files:
	  clar.c filter_test.c idmap.c inetdb.c localdb.c make-teamdb-inet.c
	  make-teamdb.c mkpasswd.c send-passwords.c submit.c
	  idmap.h inetdb.h localdb.h

2003-11-21  Alexander Chernov  <cher@ispras.ru>

	* NEWS.RUS, NEWS: Initial revision

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* userlist_xml.c: "misctext.h" is included;
	(unparse_final_tag) the element value is HTML-armored, if necessary;
	(unparse_attributed_elem) a new function, which generates XML element
	  with the given attributes. The element's value is properlt
	  HTML-armored;
	(unparse_user_short) `unparse_final_tag' is used;
	(unparse_user) `unparse_attributed_elem', `unparse_final_tag' are
	  used.

	* userlist.h:
	new type `userlist_login_hash_t' is added to hold the user login
	  hash value;
	(struct userlist_user) field `login_hash' to store the login hash
	  value is added;
	(struct userlist_list) new fields `login_hash_size', `login_hash_step',
	  `login_thresh', `login_cur_fill', `login_hash_table' to store
	  the login hash table;
	  new fields `cookie_hash_size', `cookie_hash_step', `cookie_thresh',
	  `cookie_cur_fill', `cookie_hash_table' to store the cookie hash
	  table;
	(userlist_set_user_field_str) new `lst' parameter added;
	(userlist_login_hash) new function prototype;
	(userlist_build_login_hash) new function prototype;
	(userlist_build_cookie_hash) new functon prototype;
	(userlist_cookie_hash_add) new functon prototype;
	(userlist_cookie_hash_del) new functon prototype.

	* userlist.c: "pathutl.h", "tsc.h" are included;
	(userlist_remove_user) the user hash table is rebuilt after removal;
	(userlist_set_user_field_str) a new parameter `lst' is added, which
	  is a pointer to the whole userlist structure. It is used to check
	  uniqueness of the login, if the latter changes;
	  user hash table is used to check the uniqueness;
	(userlist_login_hash) a new function, which calculates hash value
	  from a string;
	(userlist_build_login_hash) a new function, which builds the login
	  hash table;
	(userlist_build_cookie_hash) a new function, which builds the cookie
	  hash table;
	(userlist_cookie_hash_add) a new function, which adds a cookie to
	  the cookie hash table;
	(userlist_cookie_hash_del) a new function, which removes a cookie
	  from the cookie hash table.

	* userlist-server.c: "tsc.h" is included;
	<string.h> is included;
	(build_system_uid_map) special mappings for `root' and `guest' users
	  are removed;
	  login_hash_table is used to perform user login lookup;
	(cmd_register_new) `login_hash_table' is used to lookup user login,
	  if available;
	  user hash table is updated;
	(remove_cookie) the cookie is removed from the cookie hash table, if
	  that is supported;
	(generate_random_unique_cookie) a new function, which generates a
	  random unique cookie;
	(cmd_do_login) the login hash table is used for user login lookup, if
	  available;
	  lookup time is counted using the TSC counter;
	  `generate_random_unique_cookie' is used instead of
	     `generate_random_cookie';
	  the newly generated cookie is added to the cookie hash table;
	(cmd_team_login) the same as above;
	(cmd_priv_login) the same as above;
	(cmd_check_cookie) the cookie hash table is used for cookie lookup,
	  if available;
	  lookup time is counted using the TSC counter;
	  only the cookie is used to lookup cookies (as it is unique), but
	  other fields must match;
	(cmd_team_check_cookie) the same as above;
	(cmd_priv_check_cookie) the same as above;
	(cmd_do_logout) since the cookie is unique, only the cookie is checked,
	  but other fields must also match;
	(do_generate_passwd) the cookie hash table is rebuilt because cookies
	  may be deleted;
	(do_generate_team_passwd) the same as above;
	(cmd_delete_field) the same as above;
	  `userlist_set_user_field_str' usage is updated;
	(cmd_add_field) new login is checked for uniqueness and a unique
	  login is generated;
	  user hash table is updated;
	(main) TSC routines are initialized with `tsc_init';
	  the cookie hash table and the login hash table are built.

	* team.c:
	(permission_denied) error message is changed to be more informative;
	(error_not_registered) new function to display a message, when a user
	  is not registered for a particular contest;
	(error_cannot_participate) new function to display a message, when
	  a user is banned or his registration is not confirmed;
	(is_auth_error) function is removed;
	(authentificate) a proper error messaging function
	  (`error_cannot_participate', `error_not_registered',
	  `permission_denied', `fatal_server_error') is called in case
	  of authentification error.

2003-11-20  Alexander Chernov  <cher@ispras.ru>

	* testinfo.c:
	(parse_cmdline) comment character ('#') is handled properly, if
	  appears inside strings of any kinds;
	(parse_file) support for comment characters ('#') is moved to
	  `parse_cmdline'.

	* super-serve.c: <string.h> is included.

	* runlog_xml.c: "misctext.h" is included;
	(unparse_runlog_xml) all the text fields are properly HTML
	  (and so XML) armored, if necessary.

	* parsecfg.c: copyright notice is slightly changed;
	(read_variable) parsing of the configuration variable line is redone.
	  Two kinds of quotes (", ') and escape character (\) are supported,
	  which allows using arbitrary character in configuration variable
	  values.

	* misctext.h: copyright notice is updated;
	(html_armor_needed) a new function prototype is added.

	* misctext.c: copyright notice is updated;
	(html_armor_needed) new function. This function returns flag whether
	  html armoring is required for the given string. In the latter
	  case, the length of armored string is also calculated and stored
	  via the passed pointer.

	* makefile: rules `extra_progs' and `checker_lib' are added.

	* files.make: tsc.[ch] files added.

	* edit-userlist.c:
	(display_users) usage of `userlist_set_user_field_str' function
	  is changed (new first parameter added).

	* cgi.c:
	(cgi_get_char) plain (unescaped) '&' and '=' characters are immediately
	  returned to the caller, negated. This is used to distinguish control
	  characters '&' (separates variables) and '=' (separates variable
	  name and variable value) from '&' and '=' obtained as the result
	  of %HH conversion;
	(do_cgi_read) negated '&' and '=' returned by the cgi_get_char
	  routine are used as control characters.

	* COPYING.RUS: Initial revision

2003-11-04  Alexander Chernov  <cher@ispras.ru>

	* tsc.h, tsc.c: Initial revision

2003-11-02  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2003-11-02  Alexander Chernov  <cher@ispras.ru>

	* filter_expr.y: copyright notice is updated.

	* filter_scan.lex:
	(filter_expr_set_string) bug: the scanner is properly reset using
	  `yyrestart' and `BEGIN' functions.

	* html.c:
	(new_write_user_runs) `run_get_entry' function is used instead of
	  `run_get_record';
	(do_write_kirov_standings) `run_get_record' is no longer used, the
	  whole runlog is fetched using `run_get_all_entries' instead;
	  global configuration variable `prune_empty_users' is supported;
	(do_write_standings) the same as above;
	(do_write_public_log) `run_get_record' is no longer used, the
	  whole runlog is fetched using `run_get_all_entries' instead;
	(new_write_user_source_view) `run_get_entry' is used instead of
	  `run_get_entry';
	(new_write_user_report_view) `run_get_entry' is used instead of
	  `run_get_entry';
	  the used_id is checked, and if it does not match, request is
	  rejected.

	* prepare.c:
	(parse_variant_map) bug: the pointer should be advanced after a
	  value is read.

	* prepare.h, prepare.c:
	new global configuration variable `prune_empty_users'.

	* runlog.c: 
	(run_get_param) commented out;
	(run_get_record) commented out;
	(run_get_virtual_start_time) bug: the real contest start time
	  should only be returned, if status of the user is `V_REAL_USER'.

	* runlog.h: 
	(run_get_param) the prototype is removed;
	(run_get_record) the prototype is removed.

	* serve.c:
	(cmd_team_get_archive) `run_get_entry' function is used instead of
	  `run_get_record';
	(read_compile_packet) `run_get_entry' is used instead of
	  `run_get_param';
	(read_run_packet) the same as above;
	(rejudge_run) `run_get_entry' function is used instead of
	  `run_get_record';
	(do_rejudge_all) the same as above;
	(do_rejudge_problem) the same as above;

2003-11-01  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2003-11-01  Alexander Chernov  <cher@ispras.ru>

	* html.c:
	(do_write_kirov_standings) new global configuration variables are used
	  for standings table decorations: `stand_table_attr',
	  `stand_place_attr', `stand_team_attr', `stand_prob_attr',
	  `stand_solved_attr', `stand_score_attr';
	  new configuration variables `stand_extra_format',
	  `stand_extra_legend', `stand_extra_attr' are used to add an extra
	  user-defined column into the standings table;
	(do_write_standings) new global configuration variables are used
	  for standings table decorations: `stand_table_attr',
	  `stand_place_attr', `stand_team_attr', `stand_prob_attr',
	  `stand_solved_attr', `stand_penalty_attr', `stand_time_attr';
	  new configuration variables `stand_extra_format',
	  `stand_extra_legend', `stand_extra_attr' are used to add an extra
	  user-defined column into the standings table;
	  `standings_team_color', `standings_real_team_color',
	  `standings_virtual_team_color' are no longer used;
	  `stand_self_row_attr', `stand_r_row_attr', `stand_v_row_attr',
	  `stand_u_row_attr' are used instead of them;

	* makefile: 
	(CU_OBJECTS) `clean-users' now needs `libuserlist_clnt.a'.

	* master.c: 
	(print_write_xml_runs_button) a new function, which prints "Write
	  XML Runs" button;
	(print_export_xml_runs_button) the button label is changed;
	(action_write_xml_runs) a new function, which generates the runlog
	  in XML format;
	(print_dump_buttons) call of `print_write_xml_runs_button' added;
	(main) `ACTION_WRITE_XML_RUNS' action is handled.

2003-10-31  Alexander Chernov  <cher@ispras.ru>

	* prepare.c:
	(XFSIZE) a new macro to evaluate to the size of a structure field;
	(GLOBAL_SIZE) new macro to evaluate a size of a field in
	  `struct section_global_data';
	(GLOBAL_PARAM) the size of the current field is automatically
	  calculated;
	new global parameters: `stand_extra_format', `stand_extra_legend',
	  `stand_extra_attr', `stand_table_attr', `stand_place_attr',
	  `stand_team_attr', `stand_prob_attr', `stand_solved_attr',
	  `stand_score_attr', `stand_penalty_attr', `stand_time_attr',
	  `stand_self_row_attr', `stand_v_row_attr', `stand_r_row_attr',
	  `stand_u_row_attr';
	removed global parameters: `standings_team_color',
	  `standings_virtual_team_color', `standings_real_team_color';
	(PROBLEM_SIZE) new macro to evaluate a size of a field in
	  `struct section_problem_data';
	(PROBLEM_PARAM) the size of the field is calculated automatically;
	(LANGUAGE_SIZE) new macro to evaluate a size of a field in
	  `struct section_language_data';
	(LANGUAGE_PARAM) the size of the field is calculated automatically;
	(section_language_params) bug: the type of `compile_real_time_limit'
	  is set correctly to "d";
	(TESTER_SIZE) new macro to evaluate a size of a field in
	  `struct section_tester_data';
	(TESTER_PARAM) the size of the field is calculated automatically;
	(set_defaults) handling of the fields with reduced size is updated
	  in order not to overflow the fields;
	(prepare_tester_refinement) the same as above.

	* prepare.h:
	(struct section_global_data) the following fields' sizes are reduced:
	    `name', `standings_locale', `charset', `standings_charset',
	    `test_sfx', `corr_sfx', `info_sfx', `tgz_sfx', `score_system',
	    `standings_file_name', `stand2_file_name', `plog_file_name';
	  the following fields are removed: `standings_team_color',
	    `standings_virtual_team_color', `standings_real_team_color';
	  the following fields are added: `stand_extra_format',
	    `stand_extra_legend', `stand_extra_attr', `stand_table_attr',
	    `stand_place_attr', `stand_team_attr', `stand_prob_attr',
	    `stand_solved_attr', `stand_score_attr', `stand_penalty_attr',
	    `stand_time_attr', `stand_self_row_attr', `stand_r_row_attr',
	    `stand_v_row_attr', `stand_u_row_attr';
	(struct section_problem_data) the following fields' sizes are
	  reduced: `super', `short_name', `long_name', `test_sfx',
	  `corr_sfx', `info_sfx', `tgz_sfx', `input_file', `output_file',
	  `test_score_list', `deadline';
	(struct section_language_data) the following fields' sizes are
	  reduced: `short_name', `long_name', `key', `arch', `src_sfx',
	  `exe_sfx';
	(struct section_tester_data) the following fields' sizes are
	  reduced: `name', `problem_name', `arch', `key', `kill_signal',
	  `errorcode_file', `error_file'.

	* protocol.h:
	`SRV_CMD_EXPORT_XML_RUNS' is renamed to `SRV_CMD_WRITE_XML_RUNS';
	new request `SRV_CMD_EXPORT_XML_RUNS' is added.

	* runlog.c:
	(run_write_xml) a new `export_mode' parameter is added and passed
	  to `unparse_runlog_xml';
	  use of `unparse_runlog_xml' is updated.

	* runlog.h:
	(run_write_xml) a new parameter `external_mode' is added, if this
	  parameter is 1, the runlog is generated in the external format;
	(unparse_runlog_xml) the same as above.

	* runlog_xml.c: "teamdb.h" is included;
	"prepare.h" is included;
	new elements: <runs>, <users>, <user>, <problems>, <problem>,
	  <languages>, <language>;
	`team_id' attribute is renamed to `user_id';
	new attributes: `id', `name', `short_name', `long_name';
	(process_run_elements) `team_id' attribute is renamed to `user_id';
	(process_runlog_element) one parameter `ptruns' is added;
	  checks, that <runs> element is present in <runlog> and is not
	  duplicated;
	  stores the pointer to <runs> element to the address, passed in
	  parameter `ptruns';
	(parse_runlog_xml) use of `process_runlog_element' is updated;
	(unparse_runlog_xml) new parameter `external_mode' is added, if this
	  parameter is set to 1, the runlog is generated in the external
	  format;
	  list of users, problems, and languages are generated if the
	  `external_mode' is on;
	  banned and invisible teams and their runs are not generated if the
	  `external_mode' is on;
	  VSTART and VSTOP events are allowed;
	  `size', `ip', `sha1', `locale_id', and `is_imported' attributes
	  are not generated, if `external_mode' is on.

	* serve.c: 
	(cmd_view) new request `SRV_CMD_WRITE_XML_RUNS' is handled;
	  use of `run_write_xml' is updated, as this function now accepts
	  an extra parameter;
	(packet_handlers) handler for `SRV_CMD_WRITE_XML_RUNS' added.

	* client_actions.h:
	ACTION_EXPORT_XML_RUNS is renamed to ACTION_WRITE_XML_RUNS;
	new action ACTION_EXPORT_XML_RUNS added.

	* master_html.c:
	(write_priv_source) a minor type mismatch in conditional expression
	  (unsigned char * and char *) is fixed.

	* runlog.c:
	Limits for all field values are added. For example, `RUNLOG_MAX_SIZE'
	  is the maximal allowed run size;
	(struct user_entry) new structure instead of previous `struct vt_entry'
	  the new structure will store all indexing information for user.
	  Currently it stores only virtual contest information;
	(read_runlog_version_0) the runlog is checked for consistency
	  by calling `runlog_check', and then indices are built by
	  `build_indices';
	(run_set_runlog) the same as above;
	(read_runlog) the same as above;
	(runlog_flush) a new function to completely flush the run records;
	(append_record) now accept two parameters: timestamp and user_id and
	  may insert new entries into the middle of the runlog;
	(run_add_record) parameters are strictly checked for consistency;
	(run_change_status) the same as above;
	(run_reset) now accepts the duration of the contest and returns the
	  completion status;
	(run_check_duplicate) EMPTY, VSTART, VSTOP entries are skipped;
	(run_set_entry) parameters are strictly checked for consistency;
	(run_build_virtual_table) removed;
	(get_entry) removed;
	(get_user_entry) a new function instead of `get_entry';
	(run_get_virtual_start_time) if the user is not a virtual user,
	  return the real start time for it;
	  `get_user_entry' is used instead of `get_entry';
	(run_get_virtual_stop_time) `get_user_entry' is used instead of
	  `get_entry';
	(run_get_virtual_status) the same as above;
	(run_virtual_start) `get_user_entry' is used instead of `get_entry';
	  use of `append_record' is updated;
	  the runlog is checked for consistency;
	(run_virtual_stop) the same as above;
	(run_clear_entry) the function now clears correctly all record types;
	  the runlog is checked for consistency;
	(run_squeeze_log) `submission' is updated for all moved entries;
	(run_clear_variables) updated for new global variables;
	(run_write_xml) export of virtual entries is now possible;
	(check_msg) new helper function to report the message during
	  runlog consistency check;
	(runlog_check) new function to check the consistency of the runlog;
	(build_indices) new function to build the internal indexes.

	* runlog.h: `RUN_PSEUDO_LAST' constant is added;
	(run_reset) now accepts duration parameter and return the completion
	  status;
	(runlog_flush) a new function, which is flushed the whole runlog;
	(run_build_virtual_table) removed;
	(runlog_check) a new function to check the consistency of the runlog.

	* serve.c:
	(cmd_priv_command_0) `run_reset' now accepts one parameter: the
	  contest duration;
	(main) `run_build_virtual_table' call is removed, since all the
	  indexes are build during opening of the runlog file.

	* sformat.c: copyright notice is updated;
	"userlist.h" is included;
	new format specifiers for `user' structure:
	  Mc - city
	  MC - city_en
	  Mo - country
	  MO - country_en
	  Mt - inst_short
	  MT - inst_short_en
	  Mu - inst
	  MU - inst_en
	(sformat_message) the new format specifiers are supported.

	* teamdb.c: signal handling stuff is removed;
	(handler) function is removed.

	* teamdb.c:
	The file is almost rewritten. The userlist-server <-> serve exchange
	  protocol is changed in order not to put the whole table into
	  the shared memory segment. Only the `vintage' counter is stored
	  in the shared memory. If the `serve' determines, that the `vintage'
	  counter is changed, it requests the standings-oriented list of
	  the participating users in XML format via the standard communication
	  socket.
	If the connection to userlist-server is broken, the functions do
	  not try to repeatedly re-establish the connection. Instead, they
	  try once and then fail with appropriate return codes.
	Check of the connection and `vintage' counter actuality is added
	  to almost any function.
	The information about participating users is stored in the same
	  structure (struct userlist_list), as the information about all
	  users in userlist-server. XML parse routines from userlist_xml.c
	  are used.
	global variables are reorganized;
	(restore_connection) the function is removed.
	(open_connection) a new function which opens the connection to the
	  userlist-server;
	(lock_userlist_table) the function is removed;
	(unlock_userlist_table) the function is removed;
	(close_connection) a new function;
	(teamdb_refresh) the return type now `int';
	  the function is rewritten according to the principles mentioned
	  above;
	(teamdb_get_vintage) changes as described above;
	(teamdb_open_client) the function is rewritten. It just calls
	  `open_connection' and then `teamdb_refresh';
	(teamdb_lookup_client) changed as the global data structures changed;
	(teamdb_lookup) changes as described above;
	(teamdb_lookup_login) changes as described above;
	(teamdb_get_login) changes as described above;
	(teamdb_get_name) changes as described above;
	(teamdb_get_flags) changes as described above;
	(teamdb_get_max_team_id) changes as described above;
	(teamdb_get_total_teams) changes as described above;
	(teamdb_toggle_flags) changes as described above;
	(teamdb_export_team) changes as described above;
	  the pointer to the `struct userlist_user' is also exported;
	(teamdb_dump_database) changes as described above;
	(syncronize_team_extra) changes as described above;
	(teamdb_get_archive_time) changes as described above;
	(teamdb_set_archive_time) changes as described above;
	(teamdb_get_uid_by_pid) changes as described above;

	* teamdb.h: 
	(teamdb_refresh) the return type changed to `int';
	(struct teamdb_export) field `user' added: pointer to the full user
	  structure.

	* userlist-server.c:
	(struct contest_extra) `sem_key' and `sem_id' fields are removed;
	(attach_contest_extra) creation of semaphore is removed, as the
	  semaphore is no longer used;
	(detach_contest_extra) removal of semaphore set is removed from the
	  code as the semaphores are no longer used;
	(lock_userlist_table) the function is removed;
	(unlock_userlist_table) the function is removed;
	(update_userlist_table) the function is rewritten. The only action
	  is to increment the `vintage' counter in shared memory segment;
	(cmd_list_standings_users) new function to handle
	  `LIST_STANDINGS_USERS' request;
	(cmd_map_contest) the semaphore set is no longer created;
	(cmd_table) handler for `CMD_LIST_STANDINGS_USERS' is added;
	(do_work) bug: removal of the handled filedescriptor from the set
	  of active descriptors is fixed.

2003-10-30  Alexander Chernov  <cher@ispras.ru>

	* runlog_import.c:
	(runlog_import_xml) virtual contest events are supported;
	  sanity checks for the two incoming runlogs and the resulted
	  runlog are added.

	* userlist.h:
	new userlist XML generation mode: `USERLIST_MODE_STAND';
	(userlist_unparse_for_standings) a new function prototype added.

	* userlist_xml.c:
	(unparse_contests) two new parameters: `mode' and `contest_id';
	(unparse_user) new parameter `contest_id';
	  if mode == USERLIST_MODE_STAND, some attributes and elements,
	  which are irrelevant for the contest server, are not printed;
	  use of `unparse_contests' is fixed;
	(userlist_unparse_contests) use of `unparse_contests' is updated;
	(userlist_unparse) use of `unparse_user' is updated;
	(userlist_unparse_for_standings) a new function, which generates
	  XML for users, which are allowed to participate in the given
	  contest. Only general user desription is generated.

	* userlist_proto.h: `LIST_STANDINGS_USERS' command is added;
	removed old shared memory info stuff;
	(struct userlist_table) the only remaining field is currently
	  `vintage'.

	* run.c: <signal.h> is included;
	(do_loop) the process signal mask is manipulated in order to
	  prevent unexpected termination of the process.

	* edit-userlist.c:
	(display_registered_users) use of `userlist_clnt_list_all_users'
	  is updated (the explicit command is added);
	(do_display_user_menu) the same as above.

	* compile.c: <signal.h> is included;
	(do_loop) the process signal mask is manipulated in order to
	  prevent unexpected termination of the process.

	* cgi.c:
	(parse_multipart) "ignored header..." error message is no longer
	  reported, since this message is harmless, but clobbers log output.

	* userlist_clnt.h:
	(userlist_clnt_list_all_users) `cmd' parameter is added.

2003-10-27  Alexander Chernov  <cher@ispras.ru>

	* run.c:
	(run_tests) removed the temporary hack when maximal testing time
	  was set as 1 second less, than requested, because the corresponding
	  behavior of reuse library is fixed;
	  terminal state is restored properly, when managed_mode_flag variable
	  is not set.

2003-10-26  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2003-10-26  Alexander Chernov  <cher@ispras.ru>

	* html.c:
	(process_template) check for NULL pointers passed as parameters
	  added;
	(do_write_standings) bug: in case of a tie, participants are now
	  sorted in the order of their ids.

2003-10-24  Alexander Chernov  <cher@ispras.ru>

	* prepare.c:
	(set_defaults) `inactivity_timeout' is set for both serve and run
	  programs;
	(split_path) a new function, which splits the given path into
	  an array of path components;
	(make_relative_path) a new function, which constructs a relative
	  path from two absolute paths. The constructed path is suitable for
	  a symlink;
	(make_symlink) function is reworked and several bugs fixed;
	  a relative symlink is created instead of an absolute one;
	  `split_path', `make_relative_path' functions are used.

	* run.c:
	(do_loop) bug: inactivity_timeout is honored only in the managed
	  mode.

	* runlog_import.c:
	(runlog_import_xml) unused variables are removed to eliminate
	  gcc warnings.

	* super-serve.c:
	(do_loop) a serve or a run service is disabled for 60 seconds, if
	  the corresponding process respawns too fast (atleast twice in the
	  same second).

	* testinfo.c:
	(read_line) bug: potential use of uninitialized variable is fixed.

	* userlist-server.c:
	(cmd_clear_team_passwords) unused variables are removed;
	(do_clear_team_passwords) unused variable `buf' is removed.

2003-10-24  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* client_actions.h: `ACTION_RELOAD_SERVER' is added.

	* contests.c: `run_managed' attribute is supported.

	* contests.h: `run_managed' attribute is added;
	(struct contest_desc) `run_managed' field is added.

	* master.c: (print_reload_server_button) a new function to print the
	  "Reload server" button;
	(action_reload_server) a new function to send `QUIT' request to
	  the contest server;
	(main) `ACTION_RELOAD_SERVER' is handled;
	  "Reload server" button is printed.

	* protocol.h: `SRV_CMD_QUIT' command is added.

	* run.c: Managed mode is implemented. The detailed changes are below.
	<time.h> is included;
	(run_tests) `no_redirect' flag has no effect in managed mode;
	(do_loop) quit packets from serve are honored in managed mode;
	  global configuration variable `inactivity_timeout' is honored
	  in managed mode;
	(main) option `-S' is added, which turns on managed mode.

	* serve.c: (cmd_priv_command_0) `SRV_CMD_QUIT' request is handled;
	(packet_handlers) `SRV_CMD_QUIT' request is handled.

	* super-serve.c: <reuse/logger.h> is included;
	<dirent.h> is included;
	(struct contest_extra) new fields to handle `run' super-serving using
	  Linux directory notifications: `serve_used', `run_used',
	  `dnotify_flag', `run_pid', `run_dir_fd', `run_queue_dir',
	  `run_log_file';
	(dnotify_handler) new function: directory notification signal handler;
	(acquire_resources) run super-serving is implemented;
	(release_resources) the same as above;
	(get_number_of_files) a new function to return the number of files
	  in the given directory;
	(do_loop) run super-serving is implemented.

	* userlist-server.c:
	(do_clear_team_passwords) minor compilation warnings are fixed.

	* userlist_cfg.c: new element `run_path' is handled.

	* userlist_cfg.h: 
	(struct userlist_cfg) field `run_path' is added.

2003-10-20  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* compile.c:
	(do_loop) a long standing bug is fixed: task structure is
	  deallocated, when compilation is finished.

	* client_actions.h:
	new client actions added: EXPORT_XML_RUNS, MERGE_RUNS,
	  RUN_CHANGE_IMPORTED, CLEAR_TEAM_PASSWORDS_1,
	  CLEAR_TEAM_PASSWORDS_2.

	* cgi.c: (parse_multipart) maximal content-length is limited with
	  `MAX_CONTENT_LENGTH' constant, which now have value 256Kb;
	MAX_VALUE_SIZE constant is increased to 256Kb.

	* files.make: new files added:
	  userlist_clnt/clear_team_passwords.c,
	  serve_clnt/import_xml_runs.c,
	  runlog_import.c,
	  runlog_xml.c.

	* html.c: (new_write_user_runs) use of `run_get_record' is updated;
	(do_write_kirov_standings) bug: default header style is "h2", not
	  "<h2>";
	  use of `run_get_record' is updated;
	(do_write_standings) the same as above;
	(do_write_public_log) use of `run_get_record' is updated;
	(new_write_user_source_view) the same as above;
	(new_write_user_report_view) the same as above.

	* master.c:
	(make_self_url) bug: self-reference URL is constructed correctly.
	  The variable `SERVER_PORT' value is not used, because the port
	  number is already included into the value of `HTTP_HOST' variable;
	(print_export_xml_runs_button) new function to print the
	  "Export XML runs" button;
	(print_clear_team_passwords_button) new functio to print the
	  "Clear team passwords" button;
	(sched_if_asked) bug: `sscanf' is used instead of `scanf';
	(change_status_if_asked) use of `serve_clnt_edit_run' is updated,
	  as this function now has one more parameter;
	(change_status) the same as above;
	(change_problem) the same as above;
	(change_language) the same as above;
	(change_user_id) the same as above;
	(change_user_login) the same as above;
	(change_imported) a new function to change `is_imported' flag;
	(action_export_xml_runs) new function to handle the corresponding
	  request;
	(confirm_clear_team_passwords) a new function;
	(do_clear_team_passwords) a new function;
	(action_merge_runs) a new function;
	(print_dump_buttons) "Export XML" button is printed;
	(main) new actions handled: `ACTION_CLEAR_TEAM_PASSWORDS_1',
	  `ACTION_CLEAR_TEAM_PASSWORDS_2', `ACTION_RUN_CHANGE_IMPORTED',
	  `ACTION_EXPORT_XML_RUNS', `ACTION_MERGE_RUNS';
	  "Clear team passwords" button is printed.

	* master_html.c:
	(write_change_status_dialog) new parameter `disable_rejudge_flag'
	  is added. If this flag is set, "Rejudge" option is disabled;
	(write_all_runs) imported runs are marked with '*' in runid
	  column;
	  "Rejudge" button is disabled for imported runs;
	  "View source" link is disabled for imported runs;
	  "View report" link is disabled for imported runs;
	  if global configuration variable `enable_runlog_merge' is set,
	  "Import runlog" option is displayed;
	(write_priv_source) `is_imported' field is displayed;
	  if `is_imported' flag is set, no source is displayed.

	* opcaps.c, opcaps.h: new capability `IMPORT_XML_RUNS' added.

	* prepare.c, prepare.h:
	new global configuration variable `enable_runlog_merge'.

	* protocol.h:
	commands: `CMD_EXPORT_XML_RUNS', `CMD_IMPORT_XML_RUNS' added;
	field flag `PROT_SERVE_RUN_IMPORTED_SET' is added;
	(struct prot_serve_pkt_run_info) field `is_imported' added.

	* register.c:
	(initialize) bug: self-reference URL is constructed correctly:
	  the value of `SERVER_PORT' is not used, since the number
	  of port is already contained in `HTTP_HOST' variable value.

	* run.c: (run_tests) time-limit value calculations are redone.
	  Temporary hack: `task_SetMaxTime' is passed 1 the limit, which is
	  1 second less, that the actual limit, since currently a process
	  works one second more, than its time limit;
	(do_loop) provisions added to quit the program if a special run packet
	  received.

	* runlog.c:
	(run_set_runlog) a new function to completely set the runlog with
	  new values;
	(run_backup) new function to make a backup copy of the current log;
	(run_get_record) new parameter `pimported' is added, in which
	  a pointer, where to store the `is_imported' field value is passed;
	(run_set_entry) `RUN_ENTRY_IMPORTED' mask is handled and
	  `is_imported' flag is set;
	(run_write_xml) a new function to write the runlog in XML format.

	* runlog.h: new run status constants are added to simplify handling:
	  `RUN_PSEUDO_FIRST', `RUN_TRANSIENT_FIRST', `RUN_TRANSIENT_LAST';
	(run_get_record) a new parameter added to store the value of
	  `is_imported' flag;
	new field mask `RUN_ENTRY_IMPORTED';
	(struct run_entry) `is_imported' field is added;
	(run_write_xml) new function prototype;
	(unparse_runlog_xml) new function prototype;
	(parse_runlog_xml) new function prototype;
	(runlog_import_xml) new function prototype;
	(run_backup) new function prototype;
	(run_set_runlog) new function prototype.

	* serve.c:
	(cmd_team_get_archive) `run_get_record' function now has one more
	  parameter: pointer to store `is_imported' flag;
	(cmd_view) new `CMD_EXPORT_XML_RUNS' command is supported;
	(cmd_import_xml_runs) new function to handle `CMD_IMPORT_XML_RUNS'
	  request;
	(cmd_edit_run) editing of `is_imported' field is supported;
	  a run, which has `is_imported' flag set is never rejudged;
	(rejudge_run) never rejudge a run with `is_imported' flag set;
	(do_rejudge_all) never rejudge a run with `is_imported' flag set;
	(do_rejudge_problem) the same as above;
	(packet_handlers) `CMD_EXPORT_XML_RUNS', `CMD_IMPORT_XML_RUNS'
	  are handled;
	(check_sockets) the maximal size of an incoming packet is set to
	  256 KB.

	* serve_clnt.h:
	(serve_clnt_edit_run) new: parameter `is_imported' is added;
	(serve_clnt_import_xml_runs) new function prototype.

	* team.c:
	(initialize) bug: the default header style variable is initialized
	  correctly to "h2", not to "<h2>".

	* userlist-server.c:
	(cmd_clear_team_passwords) new: the function to handle the request
	  `CLEAR_TEAM_PASSWORDS';
	(cmd_table) an entry for `CLEAR_TEAM_PASSWORDS' added;
	(do_work) the maximal size of an incoming packet is increased to
	  256 KB.

	* userlist-server.c:
	(do_clear_team_passwords) a new function, which clears the
	  team passwords for all the non-privileged teams, registered
	  for the given contest.

	* userlist_clnt.h:
	(userlist_clnt_clear_team_passwords) new function prototype added;

	* userlist_proto.h:
	new userlist command added: `CLEAR_TEAM_PASSWORDS'.

	* users.c:
	(initialize) bug: self-reference URL is now constructed correctly:
	  the SERVER_PORT variable is not used as the port number is included
	  in `http_host' variable.

	* runlog_import.c, runlog_xml.c: Initial revision

2003-10-12  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2003-10-12  Alexander Chernov  <cher@ispras.ru>

	* makefile: log: checkers directory is traversed.

2003-10-12  Alexander Chernov  <cher@ispras.ru>

	* contests.c:
	(parse_contest) bug: `users_table_style', `register_table_style',
	  `users_verb_style' are properly initialized.

	* prepare.c:
	new global configuration variables: `info_dir', `info_sfx',
	  `tgz_dir', `tgz_sfx';
	new problem configuration variables: `info_dir', `info_sfx',
	  `tgz_dir', `tgz_sfx', `use_info', `use_tgz';
	(problem_init_func) `use_info', `use_tgz', `info_sfx', `tgz_sfx'
	  are initialized;
	(set_defaults) all the new configuration variables are supported.

	* prepare.h:
	(struct section_global_data) new fields `info_dir', `tgz_dir',
	  `info_sfx', `tgz_sfx', `max_cmd_length';
	(struct section_problem_data) new fields `use_info', `use_tgz',
	  `info_dir', `info_sfx', `tgz_dir', `tgz_sfx'.

	* run.c: "testinfo.h" is included;
	(struct testinfo) new fields `args', `comment', `team_comment' are
	  added. This fields are read from the .inf file, if `use_info'
	  configuration variable is set;
	(generate_report) test comment is printed, if available;
	  command line arguments are printed, if available;
	  the program input is printed before the program output;
	(generate_team_report) if team comments are defined for some failed
	  tests, they are printed after the summary;
	(run_tests) new configuration variables `use_info', `use_tgz',
	  `info_dir', `tgz_dir' are supported;
	  the program start name (argv[0]) is set to ../program, if use_tgz
	  mode is on;
	  test information is loaded, if use_info mode is on;
	  the tgz archive is extracted into the testing directory, if the
	  use_tgz mode is on;
	  command line arguments are prepared to be inserted into the log;
	  the checker is passed extra arguments, if use_info or use_tgz modes
	  are on;
	(check_config) the new configuration variables `info_dir', `tgz_dir'
	  are checked for consistency, if `use_info' or `use_tgz' modes
	  are activated.

	* makefile: subdirs_all: `checkers' directory is traversed;
	clean: `checkers' directory is traversed.

	* fileutl.h: copyright notice is updated;
	(remove_directory_recursively) new function prototype added.

	* files.make: testinfo.[ch] files added.

	* userlist-server.c:
	(attach_contest_extra) bug: wrong contest_extra array expansion
	  condition is fixed.

	* testinfo.h, testinfo.c: Initial revision

2003-10-06  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2003-10-06  Alexander Chernov  <cher@ispras.ru>

	* html.c: (new_write_user_runs) variant problems are supported;
	(do_write_public_log) variant problems are supported;
	(write_team_page) variant problems are supported;
	  problem deadlines are supported.

	* master_html.c: 
	(write_all_runs) variant problems are supported;
	(write_priv_source) variant problems are supported.

	* prepare.c:
	New global parameters: `disable_auto_testing', `show_deadline',
	  `variant_map_file';
	New problem parameters: `disable_auto_testing', `deadline',
	  `variant_num';
	(problem_init_func) `variant_num' and `disable_auto_testing' are
	  initalized to `undefined' (-1) value;
	(parse_date) new function to parse date from the string format to
	  time_t;
	(parse_variant_map) new function to parse the variant map and store
	  it in internal data structures;
	(find_variant) new function to find the correct variant for the team
	  and the problem;
	(set_defaults) all the new parameters are supported.

	* prepare.h: <time.h> is included;
	(struct section_global_data) new field `disable_auto_testing';
	  new field `show_deadline';
	  new field `variant_map_file';
	  new field `variant_map' which stores the parsed variant map;
	(struct section_problem_data) new field `disable_auto_testing';
	  new field `deadline';
	  new field `t_deadline' which stores the parsed deadline;
	  new field `variant_num';
	(find_variant) new function prototype added.

	* register.c:
	bug: incorrect initialization of static variable `head_style' is fixed;
	(display_register_new_user_page) one missed paragraph style generation
	  is added for greeting message.

	* run.c: (run_tests) new parameter `cur_variant' is added;
	  variant problems are supported;
	(do_loop) `variant' parameter is read from the run packet;
	  variant problems are supported;
	(process_default_testers)
	  variant problems are supported for consistency check;
	(check_config)
	  variant problems are supported for consistency check.

	* runlog.c, runlog.h:
	(run_get_param) one more parameter is added to return (via pointer)
	  to the caller function the user identifier for the given run.

	* serve.c:
	(is_valid_status) `RUN_ACCEPTED' is valid status even for ACM and
	  Kirov score systems (for cases whtn `disable_auto_testing' is set);
	(cmd_team_submit_run) variant problems are supported, if no variant
	  is defined for some problem and some team, the submission is
	  rejected;
	  `deadline' configuration variable is supported, the submission is
	  rejected after the deadline for the problem;
	  `disable_auto_testing' configuration variable is supported;
	(read_compile_packet) `run_get_param' now have one more parameter to
	  return the user identifier;
	  variant problems are supported: variant is passed to the `run'
	  program in the tester packet;
	(read_run_packet) `run_get_param' now have one more parameter to
	  return the user identifier.

	* teamdb.c:
	(teamdb_get_vintage) new function, which returns `vintage' parameter
	  of the user table, which is shared between `userlist-server' and
	  `serve' programs.

	* teamdb.h: 
	(teamdb_get_vintage) new function prototype added.

2003-10-02  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* users.c:
	(main) depending on the current setting of `locale_id' variable,
	  the contest name is printed either in english or in local language.

	* userlist_xml.c: copyright notice is updated;
	all the new fields are supported.

	* userlist_proto.h: definition of `USERLIST_UC_LOCKED' is added.

	* userlist.h:
	new XML elements: inst_en, instshort_en, fac_en, facshort_en,
	  surname_en, middlename_en, group_en, occupation_en, firstname_en,
	  country_en, city_en are added;
	new XML attribute locked is added;
	(struct userlist_member) new fields firstname_en, middlename_en,
	  surname_en, group_en, occupation_en, inst_en, instshort_en,
	  fac_en, facshort_en are added;
	(struct userlist_user) new fields is_locked, inst_en, instshort_en,
	  fac_en, facshort_en, city_en, country_en are added.

	* userlist.c: copyright notice is updated;
	new fields are handled in all the functions.

	* userlist-server.c:
	(cmd_team_login) new `locked' contest registration flag is handled;
	(cmd_team_check_cookie) new `locked' contest registration flag
	  is handled;
	(do_set_user_info) new userlist fields are handled;
	(do_list_users) variable header, paragraph and table style for
	  CGI-program `users' are handled;
	  either the local or english variants of institution and faculty
	  are chosen depending on `locale_id';
	(do_dump_database) new fields are handled;

	* teamdb.h: new `TEAM_LOCKED' flag is added.

	* teamdb.c: 
	(teamdb_get_flags) new `TEAM_LOCKED' flag is handled.

	* team.c:
	new static variables `head_style', `par_style' for variable header
	  and paragraph styles;
	(open_serve) variable header and paragraph styles are supported;
	(initialize) style variables are initialized from the contest
	  description;
	(open_userlist_server) variable header and paragraph styles are
	  supported;
	(permission_denied) the same as above;
	(fatal_server_error) the same as above;
	(authentificate) the same as above;
	(operation_status_page) the same as above;
	(show_clar_if_asked) the same as above;
	(request_source_if_asked) the same as above;
	(action_standings) the same as above;
	(request_report_if_asked) the same as above;
	(action_logout) the same as above;
	(display_team_page) the same as above;
	(main) the same as above.

	* register.c:
	new action `ACTION_REDISPLAY_EDIT_REGISTRATION_DATA' added;
	new static variables for the new userlist team fields are added;
	(field_desc) new descriptions of the userlist team fields are added;
	(member_field_descs) new descriptions of the userlist team member
	  fields are added;
	(initialize) style variables `head_style', `par_style', `table_style'
	  are initialized from the current contest description;
	(print_choose_language_button) variable header and paragraph styles
	  are supported;
	(read_user_info_from_server) the same as above;
	  new fields are read from the server;
	(authentificate) variable header and paragraph styles are supported;
	(display_edit_registration_data_page) variable header and paragraph
	  styles are supported;
	  the contest name is printed either in local language, or in english,
	  depending on the locale_id;
	(display_initial_page) variable header and paragraph styles are
	  supported;
	  `setlocale' is moved to the `main' function;
	  the text of registration notice for new users is changed;
	(display_login_page) variable header and paragraph styles are
	  supported;
	  `setlocale' is moved to the `main' function;
	(display_register_new_user_page) the same as above;
	(display_user_registered_page) the same as above;
	(display_main_page) variable header and paragraph styles are supported;
	  the contest name is printed either in local language, or in english,
	  depending on the locale_id;
	  `setlocale' is moved to the `main' function;
	(action_change_lang_at_initial) `setlocale' is moved to the `main'
	  function;
	(action_change_lang_at_register_new_user) the same as above;
	(action_change_lang_at_main_page) the same as above;
	(action_register_new_user) `setlocale' is moved to the `main'
	  function;
	  variable header and paragraph styles are supported;
	(action_login) the same as above;
	(action_logout) the same as above;
	(action_change_password) the same as above;
	(action_remove_member) variable header and paragraph styles are
	  supported;
	(action_register_for_contest) variable header and paragraph styles
	  are supported;
	  in case of registration error all the form variables are generated
	  to hidden html variables, and the "Back" button is generated;
	(main) `setlocale' call is added;
	  `ACTION_REDISPLAY_EDIT_REGISTRATION_DATA' is handled;
	  variable paragraph styles are supported.

	* master_html.c:
	(write_priv_users) new `Locked' flag of team registration is supported;
	  generation of the new `lock/unlock' button is added;
	(write_runs_dump) `L' is printed for locked teams.

	* master.c:
	(action_toggle_lock) a new function to lock/unlock team from the
	  current contest;
	(main) `ACTION_USER_TOGGLE_LOCK' is handled.

	* html.c:
	(new_write_user_clar) variable style of headers and paragraph
	  attributes is supported;
	(write_standings_header) variable style of headers and paragraph
	  attributes is supported;
	(do_write_kirov_standings) variable style of headers and paragraph
	  attributes is supported, when in client mode;
	(do_write_standings) the same as above;
	(write_team_page) variable style of headers and paragraph
	  attributes is supported.

	* edit-userlist.c:
	(user_descs) descriptions of new userlist team fields `is_locked',
	  `inst_en', `instshort_en', `fac_en', `facshort_en', `city_en',
	  `country_en' are added;
	(member_descs) descriptions of new userlist team member fields
	  `firstname_en', `middlename_en', `surname_en', `group_en',
	  `occupation_en', `inst_en', `instshort_en', `fac_en', `facshort_en';
	(get_contest_str) new `locked' attribute of the team registration
	  is supported;
	(display_user) new userlist fields are supported;
	  new 'L' (lock) command is supported for a contest registration;
	(user_match) new userlist team field are scanned for regexp search;
	(display_registered_users) new 'L' (lock) command is supported for
	  a contest registration.

	* copyright.c:
	Copyright notice is changed. Class "ejudge_copyright" is used for
	  text paragraphs, hyperlinks to FSF added.

	* contests.h:
	new XML elements added: name_en, users_head_style, users_par_style,
	  users_table_style, users_verb_style, register_head_style,
	  register_par_style, register_table_style, team_head_style,
	  team_par_style;
	new userlist.xml field names added: inst_en, instshort_en,
	  fac_en, facshort_en, city_en, country_en;
	new userlist.xml team member field names added: firstname_en,
	  middlename_en, surname_en, group_en, inst_en, instshort_en,
	  fac_en, facshort_en, occupation_en;
	(struct contest_desc) fields to store the new XML element values
	  are added.

	* contests.c:
	new XML elements added: name_en, users_head_style, users_par_style,
	  users_table_style, users_verb_style, register_head_style,
	  register_par_style, register_table_style, team_head_style,
	  team_par_style;
	new userlist.xml field names added: inst_en, instshort_en,
	  fac_en, facshort_en, city_en, country_en;
	new userlist.xml team member field names added: firstname_en,
	  middlename_en, surname_en, group_en, inst_en, instshort_en,
	  fac_en, facshort_en, occupation_en;
	(parse_contest) all the new XML elements are parsed;
	  default values for style elements are assigned.

	* client_actions.h:
	new action `USER_TOGGLE_LOCK' for the master CGI program.

	* cgi.h: copyright notice is updated;
	(cgi_get_param_num) new function prototype is added;
	(cgi_get_nth_param) new function prototype is added.

	* cgi.c: copyright notice is updated;
	(cgi_get_param_num) new function to get the total number of CGI
	  parameters;
	(cgi_get_nth_param) new function get the variable name and its
	  value by its number in the CGI variables array.

2003-09-29  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2003-09-29  Alexander Chernov  <cher@ispras.ru>

	* users.c:
	(initialize) calls of `client_not_configured' are updated, the
	  `locale_id' parameter is passed as 0;
	(information_not_available) calls of `client_put_header' are updated;
	(main) calls of `client_access_denied' are updated;
	  calls of `client_put_header' are updated.

	* team.c:
	(initialize) calls of `client_not_configured' are updated, the
	  `locale_id' parameter is passed as 0;
	(display_enter_password) calls of `client_put_header' are updated;
	(open_userlist_server) the same as above;
	(permission_denied) the same as above;
	(fatal_server_error) the same as above;
	(operation_status_page) the same as above;
	(show_clar_if_asked) the same as above;
	(request_source_if_asked) the same as above;
	(action_standings) the same as above;
	(request_report_if_asked) the same as above;
	(action_logout) the same as above;
	(main) calls of `client_access_denied' are updated;
	  calls of `client_check_server_status' are updated;
	  calls of `client_put_header' are updated.

	* register.c:
	(initialize) calls of `client_not_configured' are updated with
	  `locale_id' parameter as 0;
	(read_user_info_from_server) calls of `client_put_header' are
	  updated;
	(authentificate) call of `client_put_header' is updated;
	(display_edit_registration_data_page) call of `client_put_header'
	  is updated;
	(display_initial_page) call of `client_put_header' is updated;
	  `locale_id' hidden parameter is passed in the login form;
	(display_login_page) call of `client_put_header' is updated;
	(display_register_new_user_page) the same as above;
	(display_user_registered_page) the same as above;
	(display_main_page) the same as above;
	(action_register_new_user) the same as above;
	(action_login) the same as above;
	(action_logout) the same as above;
	(action_change_password) the same as above;
	(action_remove_member) the same as above;
	(action_register_for_contest) `user_show_all' parameter is initialized
	  to 0;
	  calls of `client_put_header' are updated;
	(main) calls of `client_access_denied' are updated.

	* master.c:
	(display_enter_password) call of `client_put_header' is updated -
	  parameter `locale_id' is passed value 0;
	(open_userlist_server) the same as above;
	(permission_denied) the same as above;
	(fatal_server_error) the same as above;
	(operation_status_page) the same as above;
	(view_source_if_asked) the same as above;
	(view_report_if_asked) the same as above;
	(view_teams_if_asked) the same as above;
	(action_dump_runs) the same as above;
	(action_dump_users) the same as above;
	(action_dump_standings) the same as above;
	(confirm_reset_if_asked) the same as above;
	(confirm_update_standings) the same as above;
	(confirm_regenerate_register_if_asked) the same as above;
	(confirm_regenerate_if_asked) the same as above;
	(confirm_rejudge_all) the same as above;
	(confirm_squeeze) the same as above;
	(confirm_continue) the same as above;
	(confirm_clear_run) the same as above;
	(do_generate_register_passwords_if_asked) the same as above;
	(do_generate_passwords_if_asked) the same as above;
	(view_clar_if_asked) the same as above;
	(log_out_if_asked) the same as above;
	(initialize) calls of `client_not_configured' are updated, new
	  `locale_id' parameter is passed as 0;
	(main) calls of `client_access_denied' are updated, new `locale_id'
	  parameter is passed as 0;
	  calls of `client_check_server_status' are updated, new `locale_id'
	  parameter is passed as 0;
	  calls of `client_put_header' are updated in the same manner.

	* clntutil.h:
	(client_access_denied) new parameter `locale_id' is added as last;
	(client_not_configured) the same as above;
	(client_check_server_status) the same as above;
	(client_put_header) new parameter `locale_id' is added.

	* clntutil.c:
	(process_template) new parameter `locale_id' is added. This parameter
	  is used in new `%L' format substitution;
	(client_put_header) new parameter `locale_id' is added and passed
	  to `process_template';
	(client_put_footer) `locale_id' as 0 is passed to `process_template';
	(client_access_denied) new parameter `locale_id' is added and
	  passed to `process_template';
	(client_not_configured) the same as above;
	(client_check_server_status) the same as above.

2003-09-21  Alexander Chernov  <cher@ispras.ru>

	* serve.c:
	(read_compile_packet) `RUN_CHECK_FAILED' error code from the compile
	  program is handled properly.

	* run.c: (run_tests) new problem configuration variable
	  `checker_real_time_limit' which sets time limit for checker
	  is supported.

	* prepare.h:
	(struct section_global_data) new fields `checker_real_time_limit'
	  and `compile_real_time_limit';
	(struct section_problem_data) new field `checker_real_time_limit';
	(struct section_language_data) new field `compile_real_time_limit'.

	* prepare.c:
	new global configuration variables: `checker_real_time_limit',
	  `compile_real_time_limit';
	new problem configuration variable: `checker_real_time_limit';
	new language configuration variable: `compile_real_time_limit';
	(params) an initializing function is added to `language' section;
	(global_init_func) new global configuration variables are initialized
	  with -1;
	(language_init_func) new function to initialize the language
	  section;
	(problem_init_func) initialization of the new problem configuration
	  variable in added;
	(set_defaults) the new configuration variables are handled.

	* compile.c: copyright notice is slightly changed;
	(do_loop) new configuration variable `compile_real_time_limit' which
	  sets time limit for compilation is supported.

2003-09-20  Alexander Chernov  <cher@ispras.ru>

	* userlist_proto.h:
	new command request `ULS_GENERATE_PASSWORDS' is added.

	* userlist_clnt.h:
	(userlist_clnt_generate_team_passwd) a new parameter `cmd' is added.

	* userlist-server.c:
	(do_generate_passwd) new function, which generates random register
	  passwords;
	(cmd_generate_register_passwords) a new function to handle
	  `ULS_GENERATE_PASSWORDS' request;
	(do_generate_team_passwd) invalid usage of `is_privileged_user'
	  is fixed;
	(cmd_table) entry for `ULS_GENERATE_PASSWORDS' is added.

	* teamdb.h, teamdb.c:
	(teamdb_regenerate_paswords) function is removed as no longer used.

	* prepare.c:
	(set_defaults) `test_score_list' problem configuration variable is
	  no longer inherited.

	* master.c:
	(print_regenerate_reg_button) new function to print "Regenerate
	  register user passwords" button;
	(confirm_regenerate_register_if_asked) new function;
	(do_generate_register_passwords_if_asked) new function;
	(do_generate_passwords_if_asked) interface to
	  `userlist_clnt_generate_team_passwd' changed;
	(main) new actions `GENERATE_REG_PASSWORDS_1' and
	  `GENERATE_REG_PASSWORDS_2' are supported;
	  "regenerate passwords" and "regenerate register passwords" buttons
	  are moved to a separate line.

	* client_actions.h:
	new actions `GENERATE_REG_PASSWORDS_1' and `GENERATE_REG_PASSWORDS_2'
	added.

2003-09-15  Alexander Chernov  <cher@ispras.ru>

	* serve.c:
	(cmd_priv_command_0) command `SRV_CMD_DURATION' is handled correctly.
	  The command is enabled if the contest is already started.

2003-09-06  Alexander Chernov  <cher@ispras.ru>

	* prepare.c:
	(set_defaults) problem parameters `input_file' and `output_file' are
	  expanded with `sformat_message' when inherited.

2003-08-01  Alexander Chernov  <cher@ispras.ru>

	* cdeps.c: copyright notice changed.

2003-07-11  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* l10n.c:
	(l10n_prepare) bug fixed: parameter name shadowed the name of the
	  global variable.

	* userlist-server.c: 
	(cmd_do_login) incoming packet check is improved.

2003-07-11  Alexander Chernov  <cher@ispras.ru>

	* makefile: general cleanup.
	o `libcommon.a' library is used in all utilities instead of explicit
	  listing of all used .c files;
	o `filter_test' is removed from the list of targets;
	o all dummy rules with `.exe' suffix are removed;
	o rules for unused utilities `submit', `clar', `mkpasswd',
	  `make-teamdb', `make-teamdb-inet', `send-passwords' are removed;
	o rule for `libcommon.a' is added.

	* files.make:
	new variable `COMMON_CFILES' is added and many C files which are
	  used in several utilities, are moved to this variable from CFILES.

	* edit-userlist.c:
	(generic_menu) `possibly uninitialized variable' warning (false) fixed;
	(display_user_menu) the same warning is fixed.

	* run.c:
	(do_loop) `start_env' array is freed only if the tester is a temporary
	  tester.

2003-07-10  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po, ejudge.ru_RU.KOI8-R.po:
	*** empty log message ***

	* files.make: added files: `copyright.[ch]', `l10n.[ch]'.

	* html.c: "copyright.h" included;
	(process_template) new function to generate html headers and footers,
	  performing %C, %T, %H, %R substitutes;
	(write_standings_header) `process_template' is used to generate header;
	  the current time is always used for overall standings in virtual
	  mode;
	(do_write_standings) css classes `st_place', `st_team', `st_prob',
	  `st_total', `st_pen', `st_time' are added to the generated html;
	  `process_template' is used to generate html footer;
	(write_team_page) "</a>" is generated for each "<a name="XXX">".

	* l10n.c: <stdio.h> is included.

	* makefile: (SERVE_CFILES) `copyright.c', `l10n.c' added;
	(M_CFILES) `copyright.c' added;
	(T_CFILES) `copyright.c', `l10n.c' added;
	(REG_CFILES) the same;
	(UL_CFILES) `l10n.c' added;
	(US_CFILES) `copyright.c', `l10n.c' added;
	(install) `judge' (hardlink to `master') is installed.

	* master.c:
	(display_enter_password) use of `client_put_header' updated;
	  use of `client_put_footer' updated;
	(open_userlist_server) the same as above;
	(permission_denied) the same as above;
	(fatal_server_error) the same as above;
	(operation_status_page) the same as above;
	(view_source_if_asked) the same as above;
	(view_report_if_asked) the same as above;
	(view_teams_if_asked) the same as above;
	(action_dump_runs) the same as above;
	(action_dump_users) the same as above;
	(action_dump_standings) the same as above;
	(confirm_reset_if_asked) the same as above;
	(confirm_update_standings) the same as above;
	(confirm_regenerate_if_asked) the same as above;
	(confirm_rejudge_all) the same as above;
	(confirm_squeeze) the same as above;
	(confirm_continue) the same as above;
	(confirm_clear_run) the same as above;
	(do_generate_passwords_if_asked) the same as above;
	(view_clar_if_asked) the same as above;
	(log_out_if_asked) the same as above;
	(open_serve) use of `client_put_footer' updated;
	(view_standings_if_asked) the same as above;
	(main) contests_check_{master,judge,observer}_ip function is called
	  depending on the privilege level;
	  use of `client_put_header', `client_put_footer' updated.

	* register.c: "l10n.h", "fileutl.h" are included;
	new global variables `header_txt', `footer_txt', `header_len',
	  `footer_len';
	(initialize) header and footer for html output are loaded;
	(set_locale_by_id) function removed;
	(read_user_info_from_server) use of `client_put_header' updated;
	(authentificate) the same as above;
	(display_edit_registration_data_page) the same as about;
	  `l10n_setlocale' is used instead of `set_locale_by_id';
	  contest_id is added to the generated "logout" URL;
	(display_initial_page) use of `client_put_header' updated;
	  `l10n_setlocale' is used instead of `set_locale_by_id';
	(display_login_page) the same as above;
	(display_register_new_user_page) the same as above;
	(display_user_registered_page) the same as above;
	(display_main_page) the same as above;
	  contest_id is added to the generated "logout" URL;
	(action_change_lang_at_initial) `exit' added at the end of func.;
	  `l10n_setlocale' is used instead of `set_locale_by_id';
	(action_change_lang_at_register_new_user) the same as above;
	(action_change_lang_at_main_page) the same as above;
	(action_register_new_user) the same as above;
	  use of `client_put_header' updated;
	(action_login) the same as above;
	(action_change_password) the same as above;
	(action_remove_member) use of `client_put_header' updated;
	  `exit' is used instead of `return';
	(action_register_for_contest) the same as above;
	(main) use of `client_put_footer' updated.

2003-07-09  Alexander Chernov  <cher@ispras.ru>

	* serve.c: "l10n.h" is included;
	(setup_locale) is removed;
	(update_standings_file) `l10n_setlocale' is used instead of
	  `setup_locale';
	(update_public_log_file) the same as above;
	(cmd_team_login) the same as above;
	(cmd_master_page) the same as above;
	(cmd_priv_standings) the same as above;
	(cmd_team_show_item) the same as above;
	(main) `l10n_prepare' function is used.

	* team.c: "l10n.h" is included;
	new static variables `header_txt', `footer_txt', `header_len',
	  `footer_len';
	(setup_locale) function is removed;
	(open_serve) use of `client_put_footer' updated;
	(initialize) the header and footer files are loaded using
	  contest's `team_header_file' and `team_footer_file' parameters;
	(display_enter_password) use of `client_put_header',
	  `client_put_footer' updated;
	(open_userlist_server) the same as above;
	(permission_denied) the same as above;
	(fatal_server_error) the same as above;
	(authentificate) `l10n_setlocale' used of `setup_locale';
	(operation_status_page) use of `client_put_header',
	  `client_put_footer' updated;
	(show_clar_if_asked) the same as above;
	(request_source_if_asked) the same as above;
	(action_standings) the same as above;
	(request_report_if_asked) the same as above;
	(action_logout) the same as above;
	  `locale_id' and `contest_id' are added to "login again" hyperlink;
	(main) `l10n_prepare', `l10n_setlocale' are used;
	   use of `client_put_header', `client_put_footer' updated;
	  </a> tag is generated for <a name="xxx"> tags.

	* userlist-server.c: "l10n.h" is included;
	(setup_locale) is removed, `l10n_setlocale' from `l10n.h' is used
	  instead;
	(cmd_register_new) `l10n_setlocale' is used instead of `setup_locale';
	(do_list_users) the same as above;
	(main) `l10n_prepare' is used.

	* users.c: "l10n.h" included;
	(set_locale_by_id) removed, and `l10n_prepare', `l10n_setlocale'
	  functions are used instead;
	(put_http_header) function removed, `client_put_header' is used
	  instead;
	(put_header) function removed, `client_put_header' is used instead;
	(information_not_available) `header_txt', `footer_txt' parameters
	  added;
	  use of `client_put_header', `client_put_footer' updated;
	(main) `l10n_prepare', `l10n_setlocale' functions are used instead
	  of `set_locale_by_id';
	  use of `client_put_header', `client_put_footer' updated;
	  use of `information_not_available' updated;
	  contest's `header_file', `footer_file' parameters are renamed
	  to `users_header_file', `users_footer_file';
	  use of `put_http_header', `put_header' removed;
	  use of `client_put_copyright' removed.

	* clntutil.h: (client_put_copyright) function removed;
	(client_put_header) many new parameters added;
	(client_put_footer) `out' and `template' parameters added.

	* clntutil.c: "version.h" is no longer included;
	"copyright.h" is included;
	(process_template) a new function to process html header and footer
	  template. It handles "%C", "%T", "%H", "%R" format specifiers;
	(client_put_copyright) function is removed;
	(client_put_header) many parameters added, and the new
	  `process_template' function is used to perform output;
	(client_put_footer) `out' and `template' parameters are added, and
	  `process_template' function is used to perform output;
	(client_access_denied) usage of `client_put_header' and
	  `client_put_footer' is corrected;
	(client_not_configured) the same as above;
	(client_check_server_status) the same as above;
	  also the closing </a> is generated for <a name="XXX">.

	* contests.h, contests.c:
	elements <header_file>, <footer_file> are renamed to
	<users_header_file>, <users_footer_file>;
	new elements <register_header_file>, <register_footer_file>,
	<team_header_file>, <team_footer_file> are added.

	* copyright.h, copyright.c: Initial revision

2003-07-08  Alexander Chernov  <cher@ispras.ru>

	* l10n.h, l10n.c: Initial revision

2003-07-01  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* userlist_cfg.c: `userdb_file' is a new name for `file' element;
	`socket_path' is a new name for `socket' element;
	`l10n_dir' attribute is removed, but `l10n_dir' element is added
	  instead;
	`user', `path' attributes are removed.

	* users.c, register.c:
	added element tag `l10n_dir' and removed attribute `l10n_dir';
	(err_dupl_elem) a new function to display XML configuration file error;
	(err_attr_not_allowed) the same as above;
	(err_empty_elem) the same as above;
	(err_nested_not_allowed) the same as above;
	(err_invalid_elem) the same as above;
	(err_invalid_attn) the same as above;
	(handle_final_tag) new function to check final elements;
	(parse_config) `l10n_dir' attribute is removed;
	  new error reporting functions `err_*' (see above) are used;
	  parsing of `socket_path' and `contests_dir' now uses
	  `handle_final_tag' function;
	  `l10n_dir' element is handled.

2003-06-30  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* html.c:
	(print_nav_buttons) typo is fixed in ACTION_STANDINGS constant.

	* VERSION: *** empty log message ***

	* team.c: typo is fixed in ACTION_STANDINGS constant;
	(print_standings_button) `contest_id_str' is added to the generated
	  URL.

	* client_actions.h: typo is fixed in ACTION_STANDINGS constant.

	* team.c:
	`server_lag', `standings_url', `problems_url' parameters removed;
	`contests_dir' is a new name for `contests_path' parameter;
	(hyperref) new parameter `extra_args', which is embedded into the
	  generated URL;
	(parse_contest_id) new function to parse `contest_id' CGI variable;
	(parse_name_contest_id) new function to parse contest_id from
	  the program name (e.g. team-19);
	(check_config_exist) new function;
	(initialize) the contest_id is extracted either from CGI variables,
	  or from program name, or from configuration file. The exact rules
	  are described in the source file;
	  `contests_set_directory', `contests_get' functions are used
	    instead of `parse_contests_xml';
	(read_state_params) if contest_id is read from the CGI variables,
	  it is embedded into form hidden variables;
	  `contest_id_str' has value "contest_id=XXX", if the contest_id
	  is read from CGI variables, and "" (empty string) otherwise;
	(display_enter_password) if contest_id is read from the CGI variables,
	  it is embedded into form hidden variables;
	(authentificate) `contest_id_str' is passed as `extra_args' to
	  `hyperref' function;
	(operation_status_page) the same as above;
	(print_refresh_button) `contest_id_str' is embedded into generated URL;
	(print_logout_button) the same as above;
	(display_team_page) `contest_id_str' is passed as `extra_args'
	  to `serve_clnt_team_page';
	(main) `server_lag' is always set to DEFAULT_SERVER_LAG, unless
	  `client_ignore_time_skew' contest parameter is not set;
	  `contests_check_team_ip' function is used to check the IP address;
	  `problems_url' and `standings_url' are taken from the contest
	  configuration file rather than from the team utility configuration
	  file.

	* serve.c:
	GLOBAL CHANGE: command list '-S' option is supported. This option
	  allows passing an already opened serve socket file descriptor
	  to the program. It is employed by super-serve utility.
	  new parameter `inactivity_timeout' is supported in the `-S' mode;
	(check_cnts_caps) new function, which checks, whether a given
	  user has the given capability bit for the contest;
	(cmd_team_list_runs) removed because it is not used anymore;
	(cmd_team_page) `extra_args' parameter is extracted from the
	  protocol packet and passed further to `write_team_page';
	(cmd_master_page) `extra_args' parameter is extracted from the
	  protocol packet and passed down to `write_master_page';
	(cmd_priv_standings) `extra_args' parameter is extracted from the
	  protocol packet and packet down to `write_priv_standings';
	  OPCAP_VIEW_STANDINGS capability is checked;
	(cmd_view) `extra_args' parameter is extracted from the protocol
	  packet and packet down to the html generation functions;
	  OPCAP_VIEW_SOURCE capability is required to view the source;
	  OPCAP_VIEW_REPORT capability is required to view the report;
	  OPCAP_VIEW_CLAR capability is required to view the clar;
	  OPCAP_LIST_CONTEST_USERS capability is required to view the users;
	  OPCAP_DUMP_RUNS capability is required to view the runs dump;
	  OPCAP_DUMP_STANDINGS capability is required to view the raw
	    standings;
	(cmd_message) OPCAP_NEW_MESSAGE capability is required to post
	  a message;
	  OPCAP_REPLY_MESSAGE capability is required to answer a message;
	(cmd_userlist_cmd) removed, since all such commands are now send
	  to userlist-server directly;
	(cmd_priv_command_0) OPCAP_CONTROL_CONTEST capability is required
	    for SRV_CMD_SUSPEND, SRV_CMD_RESUME, SRV_CMD_SET_JUDGING_MODE,
	    SRV_CMD_UPDATE_STAND, SRV_CMD_RESET, SRV_CMD_START, SRV_CMD_STOP,
	    SRV_CMD_SCHEDULE, SRV_CMD_DURATION, SRV_CMD_SQUEEZE_RUNS,
	    SRV_CMD_CLEAR_RUN, SRV_CMD_CONTINUE;
	  OPCAP_EDIT_RUN capability is required for SRV_CMD_REJUDGE_ALL,
	    SRV_CMD_REJUDGE_PROBLEM;
	  SRV_CMD_TOGGLE_VISIBILITY, SRV_CMD_TOGGLE_BAN commands are removed;
	(packet_handlers) SRV_CMD_LIST_RUNS, SRV_CMD_LIST_CLARS,
	  SRV_CMD_GEN_PASSWORDS, SRV_CMD_TOGGLE_VISIBILITY, SRV_CMD_TOGGLE_BAN,
	  SRV_CMD_DUMP_USERS commands are removed;
	(create_socket) if socket is passed from the command line, the
	  function returns immediately;
	(check_sockets) `last_activity_time' is updated on each arrived packet;
	(do_loop) `last_activity_time' is initialized;
	  `inactivity_timeout' global parameter is supported;
	(main) `-S<socket_num>' option is supported.

	* register.c:
	This file is almost completely rewritten. Too many changes to list them
	  all verbosely. The short summary is listed below:
	o copyright notice is updated;
	o the code is rearranged to follow `State-Transition' model;
	o `contests_dir' parameter is a new name for `contests_path'
	  configuration parameter;
	o the contest_id is extracted either from CGI variables, or from
	  the program name (e. g. register-16), or from configuration file.
	  The exact rules are in the source file.
	o Login and Password are not passed in hidden variables. Instead
	  the session identifier `sid' is passed.
	o Hyperrefs are used where possible instead of forms.
	o Cookies are not used, session id's, embedded into forms and ulrs
	  are used instead.

	* userlist-server.c:
	The file is heavily reworked. The global changes:
	  o CONN_ERR, CONN_INFO, CONN_BAD macros are used to log events;
	  o user capabilities are supported for all operations;
	  o new contests operation interface is used (contests_set_directory,
	    contests_get, contests_get_list instead of direct XML loading and
	    manipulation);
	  o all packet structures, which have variable length (i. e. conveys
	    strings, such as login, password, etc), now has space for
	    the terminating \0 characters allocated in the structure itself,
	    i. e. instead of `data[0]' field they have, for example,
	    `data[2]' field, so the structure size counting in all functions
	    is updated accordingly;
	  o some minor parameters renaming: `pack' -> `data',
	    `len' -> `pkt_len' in order to uniform all the protocol
	    handling functions;
	  o all the functions, which handle protocol request are now named
	    with `cmd_' prefix;
	(struct contest_extra) `desc' field is removed, since the pointer
	  to contest structure may change unexpectedly;
	global `contests' variable is removed;
	new global variable `contest_extras_size' to store the number of
	  contest extra information records;
	(attach_contest_extra) new parameter `cnts' added to eliminate
	  repetitive loading of contest information;
	(detach_contest_extra) memory is freed correctly, updated to the
	  new interface;
	(update_userlist_table) updated to the new interface;
	(get_uid_caps) a new function, which looks for an entry in capability
	  list by the user id. This function MUST be optimized for speed.
	(is_db_capable) a new function, which checks, whether the given user
	  has the given capability bit for the user database;
	(is_cnts_capable) a new function, which checks, whether the given
	  user has the given capability bit for the given contest;
	(is_privileged_user) a new function, which checks, whether the given
	  user is a privileged user;
	(cmd_register_new) this is the new name for `create_newuser';
	  updated for the changes described above;
	(cmd_do_login) this is the new name for `login_user';
	  updated for the changes described above;
	(cmd_team_login) this is the new name for `login_team_user';
	  updated for the changes described above;
	(cmd_priv_login) this is the new name for `cmd_login_priv_user';
	  updated for the changes described above;
	(cmd_check_cookie) this is the new name for `login_cookie';
	  updated for the changes described above;
	(cmd_team_check_cookie) this is the new name for `login_team_cookie';
	  updated for the changes described above;
	(cmd_priv_check_cookie) this is the new name for `login_priv_cookie';
	  updated for the changes described above;
	(cmd_do_logout) this is the new name for `logout_user';
	  updated for the changes described above;
	(cmd_get_user_info) this is the new name for `get_user_info';
	  updated for the changes described above;
	(cmd_priv_get_user_info) a new function to perform a privileged
	  request ULS_PRIV_GET_USER_INFO;
	(cmd_list_all_users) updated for the changes described above;
	(cmd_get_user_contests) this is the new name for `get_user_contests';
	  updated for the changes described above;
	(do_set_user_info) a new function to set all user info fields. This
	  function is split from cmd_set_user_info in order to use it in both
	  privileged and unpriveleged versions;
	  updated for the changes described above;
	(cmd_set_user_info) this is new name for `set_user_info';
	  this function checks the input packet and passes it to
	  `do_set_user_info';
	(cmd_set_passwd) this is new name for `set_passwd';
	  updated for the changes described above;
	(cmd_team_set_passwd) this is new name for `team_set_password';
	  updated for the changes described above;
	(cmd_register_contest) this is new name for `register_for_contest';
	  updated for the changes described above;
	(cmd_priv_register_contest) a new function to perform a privileged
	  operation ULS_PRIV_REGISTER_CONTEST;
	(cmd_remove_member) this is a new name for `remove_member';
	  updated for the changes described above;
	(cmd_pass_fd) this is a new name for `pass_descriptors';
	  updated for the changes described above;
	(do_list_users) new parameter `d' is added in order not to load
	  contest description repeatedly;
	  updated for the changes described above;
	(do_dump_database) new parameter `d' is added in order not to reload
	  contest description;
	  updated for the changes described above;
	(cmd_list_users) this is a new name for `list_users';
	  updated for the changes described above;
	(cmd_dump_database) this is a new name for `action_dump_user_database';
	  updated for the changes described above;
	(cmd_map_contest) updated for the changes described above;
	(cmd_admin_process) this protocol command now only sets the user_id
	  to the user_id of the process, which originates the connection;
	  updated for the changes described above;
	(do_generate_team_passwd) password for privileged users is not changed;
	(cmd_generate_team_passwords) this is a new name for
	  `cmd_generate_team_passwd';
	  updated for the changes described above;
	(cmd_get_contest_name) updated for the changes described above;
	(cmd_edit_registration) updated for the changes described above;
	(cmd_delete_field) updated for the changes described above;
	(cmd_edit_field) updated for the changes described above;
	(cmd_add_field) updated for the changes described above;
	(cmd_get_uid_by_pid) updated for the changes described above;
	(process_packet) the huge switch is removed with lookup in the
	  function table `cmd_table';
	(do_work) timeout for clients is not enforced;
	(main) `contests_dir' is a new name for previous `contests_path'
	  configuration parameter;
	  `contests_set_directory' is used instead of `parse_contests_xml'.

2003-06-29  Alexander Chernov  <cher@ispras.ru>

	* users.c: copyright notice is updated;
	<sys/types.h>, <sys/stat.h>, <unistd.h>, <fcntl.h> are included;
	TG_CONTESTS_DIR is a new name for TG_CONTESTS_PATH, XML element
	  contests_dir is a new name for contests_path;
	(parse_config) XML elements are renamed (see above);
	`contests' global variable is removed;
	(read_contest_id) function removed;
	(parse_contest_id) new function, which parses `contest_id' CGI
	  variable;
	(parse_name_contest_id) new function, which extracts contest_id from
	  the CGI program name;
	(check_config_exist) new function;
	(initialize) contest_id is extracted either from the CGI program name,
	  or from `contest_id' CGI variable;
	  configuration file name is constructed according to new rules
	  (see the comments in the code);
	  parse_contests_xml is no longer used;
	  `self_url' default CGI name is now /cgi-bin/users;
	(information_not_available) a new function to display this error;
	(main) `contests_set_directory', `contests_get' are used to access
	  the contest information;
	  user ip is checked with `contests_check_users_ip';
	  other code rearrangements.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* userlist_cfg.h: copyright notice is updated;
	"opcaps.h" is included;
	(struct userlist_cfg_admin_proc) removed;
	(struct userlist_cfg) `admin_processes' field removed;
	  `capabilities', `serve_path' fields added;
	  `contests_dir' is a new name for `contests_path'.

	* userlist_cfg.c: copyright notice is updated;
	TG_CONTESTS_DIR is a new name for TG_CONTESTS XML element;
	removed XML element contants: TG_ADMIN_PROCESSES, TG_ADMIN_PROCESS;
	new XML element contants: TG_CAPS, TG_CAP, TG_SERVE_PATH;
	new XML attribute constant: AT_LOGIN;
	(tree_alloc_func) updated according to change in XML elements;
	(parse_processes) removed as no longer used;
	(parse_capabilities) new function to parse <caps> XML element;
	(userlist_cfg_parse) updated according to changes in XML elements;
	(fmt_func) updated according to changes in XML elements.

	* userlist.h: copyright notice is updated.

	* serve_clnt.h: 
	(serve_clnt_team_page) parameter `extra_args' added;
	(serve_clnt_master_page) parameter `extra_args' added;
	(serve_clnt_standings) parameter `extra_args' added;
	(serve_clnt_view) parameter `extra_args' added.

	* runlog.h: copyright notice is updated;
	(run_clear_variables) prototype added.

	* runlog.c: copyright notice is updated;
	(run_clear_variables) new function, which is completely releases
	  the resources.

	* run.c:
	(filter_testers) check, that the total number of (non-default)
	  testers is > 0 is removed;
	(run_tests) new variable `arg0_path', which contains the path
	  to the program under test, which is passed to execve syscall,
	  this path contains only the current directory (./), not
	  the full directory path;
	(do_loop) in case of default tester, it is specialized using
	  `prepare_tester_refinement' function, and then passed to
	  `run_tests';
	(process_default_testers) new function to check default tester
	  settings;
	(check_config) checking of global settings is moved out of the
	  tester loop;
	  added a separate loop for testing problem settings;
	  default tester settings are also checked.

	* super-serve.c: completed.

	* protocol.h:
	removed commands: SRV_CMD_LIST_RUNS, SRV_CMD_LIST_CLARS,
	  SRV_CMD_GEN_PASSWORDS, SRV_CMD_TOGGLE_VISIBILITY,
	  SRV_CMD_TOGGLE_BAN, SRV_CMD_DUMP_USERS;
	(struct prot_serve_pkt_team_page) new field `extra_args_len';
	  `data' now has size 3;
	(struct prot_serve_pkt_master_page) new field `extra_args_len';
	  `data' now has size 4;
	(struct prot_serve_pkt_standings) new field `extra_args_len';
	  `data' now has size 3;
	(struct prot_serve_pkt_view) new field `extra_args_len';
	  `data' now has size 3.

	* prepare.h:
	(struct section_global_data) new field `inactivity_timeout';
	  `contests_dir' is a new name for `contests_path';
	  `contests' global variable is removed;
	(prepare_tester_refinement) new function prototype;
	(create_tester_dirs) new function prototype.

	* prepare.c: MAX_PROBLEM is increased to 100;
	`contests' global variable is removed;
	new global parameter `inactivity_timeout' for `serve' utility with
	  default value 120 sec;
	global parameter `contests_path' is renamed to `contests_dir';
	(set_defaults) `contests_dir' is used instead of `contests_path';
	  `contests_set_directory' and `contests_get' are used instead of
	  `parse_contest_xml' and direct access to the contests array;
	  `inactivity_timeout' is handled;
	  default testers are not processed in PREPARE_RUN mode, this is
	  now done in `prepare_tester_refinement' function;
	(create_dirs) default testers are ignored in PREPARE_RUN mode, this
	  is now done in `create_tester_dirs' function;
	(prepare_tester_refinement) a new function, which performs all
	  inheritance and default setting for a default tester with
	  the given problem_id;
	(create_tester_dirs) a new function, which creates necessary
	  directories for a tester in PREPARE_RUN mode;
	(print_tester) `check_dir' is printed.

	* master_html.c:
	(html_start_form) `extra_args' parameter is added (but not used);
	  `hidden_vars' parameter is used in form header generation;
	(html_hyperref) `extra_args' parameter is added, the parameter's
	  value is added to the generated hyperref;
	(print_nav_buttons) `extra_args' parameter is added and passed
	  further to `html_start_form' and `html_hyperref' functions;
	(write_all_runs) `extra_args' parameter is added and passed
	  further to `html_start_form', `html_hyperref' and
	  `print_nav_buttons' functions;
	(write_all_clars) the same as above;
	(write_master_page) `extra_args' parameter is added and passed
	  further to `write_all_runs' and `write_all_clars' functions;
	(write_priv_standings) `extra_args' parameter is added and passed
	  further to `print_nav_buttons' function;
	(write_priv_report) the same as above;
	(write_priv_source) `extra_args' parameter is added and passed
	  further to `print_nav_buttons' and `html_start_form' functions;
	(write_priv_clar) the same as above;
	(write_priv_users) the same as above.

	* master.c: GLOBAL CHANGE: contest_id CGI parameter is honored;
	<fcntl.h> file is included;
	`contest_path' configuration parameter is renamed to `contests_dir';
	(read_state_params) if `contest_id' was set from CGI variables
	  add setting of `contest_id' CGI parameter to all form headers
	  and hidden variables;
	(make_self_url) "SERVER_PORT" environment variable is read and used;
	(hyperref) new parameter `contest_id_str' is accepted and added
	  to the generated URL;
	(display_enter_password) `contest_id' is added to the generated form
	  header, if this variable was read from CGI parameters;
	  default sid_mode is URL;
	(authentificate) use of `hyperref' function is updated;
	(print_refresh_button) `contest_id_str' variable is used to generate
	  URLs;
	(print_standings_button) the same as above;
	(print_teamview_button) the same as above;
	(print_logout_button) the same as above;
	(print_dump_runs_button) the same as above;
	(print_dump_users_button) the same as above;
	(print_dump_standings_button) the same as above;
	(operation_status_page) use of `hyperref' is updated;
	(view_source_if_asked) `contest_id_str' is passed to `serve_clnt_view'
	  as `extra_args' parameter;
	(view_report_if_asked) the same as above;
	(view_teams_if_asked) the same as above;
	(action_dump_runs) the same as above;
	(action_dump_standings) the same as above;
	(view_clar_if_asked) the same as above;
	(action_dump_users) the request is sent directly to `userlist-server'
	  instead of `serve';
	(do_generate_passwords_if_asked) the same as above;
	(action_toggle_visibility) the same as above;
	(action_toggle_ban) the same as above;
	(send_msg_if_asked) sending a message to specified login or user_id
	  is supported;
	(parse_contest_id) new function to parse `contest_id' CGI parameter;
	(parse_name_contest_id) new function to extract `contest_id'
	  from the name of CGI script;
	(check_config_exist) new function;
	(initialize) `contest_id' parameter is extracted either from script
	  name, or from CGI parameters. See the comment in the code for
	  further details;
	  `contests_set_directory', `contests_get' functions are used to
	  load information about contest;
	  `root_dir' is copied from the contest XML description;
	(view_standings_if_asked) `contest_id_str' is passed to
	  `serve_clnt_standings' as `extra_args' parameter;
	(display_master_page) `contest_id_str' is passed to
	  `serve_clnt_master_page' as `extra_args' parameter;
	(main) `contests_check_master_ip' is used;
	  if contest's `client_ignore_time_skew' flag is set, lag is set to
	  0 (infinity) value;
	  fields "To user id" and "To user login" added to message composition.

	* makefile:
	opcaps.c added to the list of the source files for the following
	  utilities: compile, serve, run, master, team, register,
	  userlist-server, users, edit-userlist, filter_test;
	new variable SS_CFILES for the list of super-serve .c files;
	new variable CU_CFILES for the list of clean-users .c files;
	`super-serve' and `clean-users' added to the list of targets;
	new rule to link super-serve utility;
	new rule to link clean-users utility.

	* html.h: 
	(new_write_user_runs) new parameter `extra_args' added;
	(new_write_user_clars) the same as above;
	(write_team_page) the same as above;
	(write_master_page) the same as above;
	(write_priv_standings) the same as above;
	(write_priv_source) the same as above;
	(write_priv_report) the same as above;
	(write_priv_clar) the same as above;
	(write_priv_users) the same as above;
	(html_start_form) the same as above;
	(html_hyperref) the same as above.

	* html.c:
	(new_write_user_runs) new parameter `extra_args', which is passed
	  further to hyperref generation and form generation;
	(new_write_user_clars) new parameter `extra_args', which is passed
	  further to hyperref generation and form generation;
	(print_nav_buttons) new parameter `extra_args';
	(write_team_page) new parameter `extra_args'.

	* filter_scan.lex: copyright notice is updated;
	"EM" run result is handled.

	* files.make:
	removed files: serve_clnt/list_runs.c, serve_clnt/userlist_cmd.c;
	added files: clean-users.c, opcaps.c, opcaps.h, super-serve.c.

	* edit-userlist.c: copyright notice is added;
	<errno.h>, <regex.h> files included;
	`contests' global variable is removed, since new contest interface
	  is implemented;
	(generic_menu) new static function to implement a generic menu;
	(display_participant_sort_menu) new function to display a participant
	  sort options;
	(display_search_menu) new function to display search options;
	(get_contest_str) `contests_get' function is used instead of direct
	  operation;
	(display_user) use of `userlist_clnt_get_info' is changed (command
	  parameter is added);
	  use of `userlist_clnt_register_contest' is changed (see above);
	(user_regmatch) new function to check a string against a regular
	  expression;
	(user_match) new function, which checks a user according to a given
	  search criteria;
	(user_search) new function: search in the list of users;
	(registered_users_sort_func) a new helper function for `qsort';
	(display_registered_users) `cnts' parameter is replaced with
	  `contest_id';
	  new `contests_get' function is used;
	  if no users are registered for a contest, the administrator is
	  prompted to add a user;
	  sorting of registered users is supported;
	  new hot keys 's', 'j', 'e' are handled:
	    's' - sort users;
	    'j' - jump to a user;
	    'e' - search for a user;
	  help line is updated;
	(display_contests_menu) `contests_get_list', `contests_get' functions
	  are used instead of direct access;
	(do_display_user_menu) this is a new name for `display_user_menu';
	  if no users are registered, the administrator is prompted to add
	    a new user;
	  sorting of users is implemented;
	  new hot keys 's', 'j', 'e' are handled:
	    's' - sort users;
	    'j' - jump to a user;
	    'e' - search for a user;
	(display_user_menu) new function, which calls `do_display_user_menu'
	  and loops while the return value == -2;
	(display_main_menu) use of `display_user_menu' is updated;
	(main) `contests_set_directory' is used, `parse_contests_xml' is not
	  used.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* contests.h: copyright notice is updated;
	"opcaps.h" is included;
	<time.h> is included;
	removed XML element constants: CONTEST_ACCESS,
	  CONTEST_PRIVILEGED_USERS, CONTEST_ADMINISTRATOR, CONTEST_JUDGE,
	  CONTEST_OBSERVER;
	new XML element constants: CONTEST_REGISTER_ACCESS,
	  CONTEST_USERS_ACCESS, CONTEST_MASTER_ACCESS, CONTEST_JUDGE_ACCESS,
	  CONTEST_OBSERVER_ACCESS, CONTEST_TEAM_ACCESS, CONTEST_CAP,
	  CONTEST_CAPS, CONTEST_ROOT_DIR, CONTEST_STANDINGS_URL,
	  CONTEST_PROBLEMS_URL, CONTEST_CLIENT_FLAGS, CONTEST_SERVE_USER,
	  CONTEST_SERVE_GROUP;
	new XML attribute constants: CONTEST_A_LOGIN, CONTEST_A_MANAGED,
	  CONTEST_A_CLEAN_USERS;
	(struct contest_desc) removed fields: `priv_users', `access';
	(struct contest_desc) new fields: `managed', `clean_users',
	  `root_dir', `standings_url', `problems_url', `serve_user',
	  `serve_group', `register_access', `users_access', `master_access',
	  `judge_access', `observer_access', `team_access', `capabilities',
	  `client_ignore_time_skew', `client_disable_team', `last_check_time',
	  `last_file_time';
	(parse_contest_xml) function prototype removed;
	(contests_check_ip) function prototype removed;
	new error codes enumeration added;
	(contests_set_directory) new function prototype;
	(contests_get_list) new function prototype;
	(contests_get) new function prototype;
	(contests_strerror) new function prototype;
	(contests_lock) new function prototype, not yet implemented;
	(contests_unlock) new function prototype, not yet implemented;
	(contests_check_ip) new function prototype;
	(contests_check_register_ip) new function prototype;
	(contests_check_users_ip) new function prototype;
	(contests_check_master_ip) new function prototype;
	(contests_check_judge_ip) new function prototype;
	(contests_check_observer_ip) new function prototype;
	(contests_check_team_ip) new function prototype;
	(contests_set_load_callback) new function prototype, function is
	  implemented but callbacks are not yet called upon event;
	(contests_set_unload_callback) new function prototype, function is
	  implemented but callbacks are not yet called upon event.

	* contests.c: copyright notice is updated;
	the file is heavily reworked:
	  o each contest description is placed into a separate XML file;
	  o each time the contest description is requested, the file is
	    checked for updates;
	  o capabilities are supported;
	XML elements removed `access', `privileged_users', `administrator',
	  `judge', `observer';
	new XML elements added: `register_access', `users_access',
	  `master_access', `judge_access', `observer_access', `team_access',
	  `cap', `caps', `root_dir', `standings_url', `problems_url',
	  `client_flags', `serve_user', `serve_group';
	new XML attributes: `login', `managed', `clean_users';
	(parse_capabilities) new function to parse capabilities, used in
	  <cap> XML element;
	(parse_client_flags) new function to parse client flags,
	  currently IGNORE_TIME_SKEW and DISABLE_TEAM flags are supported,
	  used in <client_flags> XML element;
	(parse_contest) `managed' and `clean_users' attributes are supported;
	  new XML elements supported: `root_dir', `standings_url',
	  `problems_url', `serve_user', `serve_group', `client_flags',
	  `caps', `register_access', `users_access', `master_access',
	  `judge_access', `observer_access', `team_access';
	  removed support for XML elements: `privileged_users', `access';
	(parse_contest_xml) function is removed;
	(parse_one_contest_xml) new function to parse one contest's
	  description;
	(do_check_ip) this is new name for `contests_check_ip';
	(contests_check_ip) new function which checks the given IP against
	  one of the access lists according to `field' parameter;
	(contests_check_register_ip) new function;
	(contests_check_users_ip) new function;
	(contests_check_master_ip) new function;
	(contests_check_judge_ip) new function;
	(contests_check_observer_ip) new function;
	(contests_check_team_ip) new function;
	(contests_set_callback) a new static function to add a specified
	  function to a specified callback list;
	(contests_set_load_callback) a new function to add a specified
	  function to the load callback list;
	(contests_set_unload_callback) a new function to add a specified
	  function to the unload callback list;
	(contests_free) a new internal function to free the XML data
	  structures;
	(contests_make_path) a new internal function to compose a path
	  to XML contest description;
	(contests_set_directory) a new function to set the contest
	  directory;
	(contests_get_list) a new function to get the list of all the
	  XML contest descriptions;
	(contests_get) a new function to load a contest description;
	(contests_strerror) a new function, which returns user-readable
	  description of contest error.

	* clntutil.c:
	(client_check_server_status) client-server time skew is only checked
	  if `lag' parameter greater than 0.

	* clarlog.h: copyright notice is updated;
	`CLAR_LOG_READONLY' flag added;
	(clar_clear_variables) prototype added.

	* clarlog.c: copyright notice is updated;
	(clar_read_entry) user_id consistency checks are commented out;
	(clar_open) `CLAR_LOG_READONLY' flag is supported;
	(clar_add_record) user_id consistency checks are commented out;
	(clar_clear_variables) new function, which clears all the variables
	  and releases resources.

	* .cvsignore: *** empty log message ***

2003-06-28  Alexander Chernov  <cher@ispras.ru>

	* clean-users.c: Initial revision

2003-06-26  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* userlist_clnt.h: 
	(userlist_clnt_get_info) new parameter 'cmd' added;
	(userlist_clnt_register_contest) new parameter 'cmd' added.

	* userlist_proto.h:
	new commands added: PRIV_GET_USER_INFO, PRIV_SET_USER_INFO,
	  PRIV_REGISTER_CONTEST.

2003-06-22  Alexander Chernov  <cher@ispras.ru>

	* super-serve.c, opcaps.h, opcaps.c: Initial revision

2003-03-08  Alexander Chernov  <cher@ispras.ru>

	* serve.c:
	(cmd_team_submit_run) `run_get_virtual_stop_time' now has two
	  parameters and stops the contest in case of expiration;
	(cmd_team_submit_clar) `run_get_virtual_stop_time' now has two
	  parameters;
	(cmd_command_0) the same.

	* runlog.h:
	(run_get_virtual_stop_time) now accepts two parameters instead of one.

	* runlog.c:
	(run_build_virtual_table) a bit more verbose message in case of
	  virtual time overrun;
	(run_get_virtual_stop_time) now accepts two parameters, the second is
	  is `cur_time'. The function stops the virtual contest, if the time
	  is over.

	* html.c:
	(write_standings_header) `run_get_virtual_stop_time' now has 2
	  parameters;
	(do_write_standings) the same;
	(write_team_page) the same.

2003-02-24  Alexander Chernov  <cher@ispras.ru>

	* serve.c:
	(update_status_file) `continuation_enabled' field of the status file
	  is handled;
	(cmd_priv_command_0) command `SRV_CMD_CONTINUE' is supported;
	(packet_handlers) `SRV_CMD_CONTINUE' is handled.

	* run.c: 
	(run_tests) testsets are supported.

	* protocol.h:
	(struct prot_serve_status) new field `continuation_enabled';
	new command constant `SRV_CMD_CONTINUE'.

	* prepare.h:
	(struct testset_info) new structure to hold information about
	  test sets;
	new global parameter `enable_continue';
	testsets support added to problem structure.

	* prepare.c: <ctype.h> is included;
	new global parameter `enable_continue';
	new global parameter `test_sets';
	(parse_testsets) new function to parse testset specification;
	(set_defaults) if scoring system is invalid, configuration parsing
	  now fails;
	  testset specifications are parsed.

	* master.c: (confirm_continue) new function;
	(action_continue) new function;
	(main) actions CONTINUE and CONTINUE_2 are supported.

	* clntutil.h: new extern variable `server_continuation_enabled'.

	* clntutil.c: new global variable `server_continuation_enabled';
	(client_check_server_status) `server_continuation_enabled' is read
	  from the server status file;
	(client_print_server_status) in master mode and if
	  `server_continuation_enabled' flag is set, "Continue" button is
	  printed.

	* client_actions.h: CONTINUE and CONTINUE_2 actions added.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2003-02-16  Alexander Chernov  <cher@ispras.ru>

	* prepare.c:
	(problem_init_func) default `run_penalty' is set to -1, as 0 is valid
	  run_penalty;
	(set_defaults) `0' is valid run_penalty.

	* run.c:
	(run_tests) abnormal task termination is checked only if error_code
	  file is not set.

	* userlist-server.c:
	(get_user_info) removed check, that xml info length is < 65536;
	(cmd_list_all_users) removed xml data limitation.

	* userlist_proto.h:
	(struct userlist_pk_xml_data) field `info_len' changed
	  to type `unsigned int' instead of `unsigned short'.

2003-02-04  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2003-02-04  Alexander Chernov  <cher@ispras.ru>

	* serve.c: new global variable `olympiad_judging_mode';
	(update_status_file) `olympiad_judging_mode' field is set from
	  `olympiad_judging_mode' global variable;
	(cmd_priv_command_0) `SRV_CMD_SET_JUDGING_MODE' command is
	  handled;
	(read_compile_packet) in OLYMPIAD scoring system the final testing
	  is performed only if `olympiad_judging_mode' variable is set;
	(do_rejudge_all) better handling of OLYMPIAD scoring system is
	  implemented: only the last accepted run for each participant and
	  each problem is considered for final judging;
	(do_rejudge_problem) better handling of OLYMPIAD scoring system
	  is implemented: only the last accepted run for each participant
	  is considered;
	(packet_handlers) `SRV_CMD_SET_JUDGING_MODE' command is handled.

	* master.c: 
	(authentificate) page reload delay is set to 0 secs;
	(print_judging_mode_button) a new function to generate HTML code
	  for "Set judging mode" button;
	(operation_status_page) page reload delay is set to 0 secs;
	(action_set_judging_mode) new function to perform action for the
	  "Set judging mode" button;
	(main) ACTION_SET_JUDGING_MODE is handled;
	  "Set judging mode" button is printed, if scoring system is
	  OLYMPIAD.

	* html.c:
	(do_write_kirov_standings) full solutions are counted properly
	  in OLYMPIAD judging mode.

	* clntutil.h: copyright notice is updated;
	external declaration for `server_olympiad_judging_mode' is added.

	* clntutil.c: new global variable `server_olympiad_judging_mode';
	(client_check_server_status) `server_olympiad_judging_mode' variable
	  is filled from the server status structure;
	(client_print_server_status) the current judging status is printed,
	  if the scoring system is olympiad;
	  the actual ending time is printed in case of permature contest
	  termination.

	* client_actions.h: new action SET_JUDGING_MODE is added.

	* prepare.c: copyright notice is slightly updated;
	(set_defaults) `tests_to_accept' field is set properly in any
	  judging mode, since now the checker must be able to check
	  problems from contests running in different modes.

	* protocol.h:
	(struct prot_serve_status) field `olympiad_judging_mode' is added,
	  which is set to 1, if the current scoring mode is "OLYMPIAD";
	SRV_CMD_SET_JUDGING_MODE request code is added.

	* team.c: copyright notice is updated;
	(authentificate) page refresh time is changed to 0 sec;
	(operation_status_page) the same.

2003-02-01  Alexander Chernov  <cher@ispras.ru>

	* makefile: copyright notice is updated;
	minor reorganization.

2003-01-31  Alexander Chernov  <cher@ispras.ru>

	* userlist_proto.h: copyright notice is updated;
	DUMP_DATABASE request added;
	(struct userlist_pk_dump_database) new packet.

	* userlist_clnt.h: copyright notice is updated;
	(userlist_clnt_dump_database) new function prototype.

	* userlist-server.c: copyright notice is updated;
	(do_list_users) a code which dumps raw database is moved to
	  `do_dump_database';
	(do_dump_database) new function, which dumps raw user database;
	(action_dump_user_database) new function to handle DUMP_DATABASE
	  request;
	(process_packet) DUMP_DATABASE request is handled.

	* teamdb.h: copyright notice is updated;
	(teamdb_dump_database) new function prototype.

	* teamdb.c: copyright notice is updated;
	(teamdb_regenerate_passwords) file descriptors are not leaked in case
	  of temporary server disconnection;
	(teamdb_dump_database) new function to pass the file descriptor
	  to the userlist-server to dump the user database.

	* serve_clnt.h: copyright notice is updated;
	(serve_clnt_userlist_cmd) new name for `serve_clnt_get_passwords'.

	* serve.c:
	(cmd_view) new commands handled: DUMP_RUNS, DUMP_STANDINGS;
	(cmd_gen_passwords) renamed to `cmd_userlist_cmd';
	(cmd_userlist_cmd) handles GEN_PASSWORDS and DUMP_USERS;
	(packet_handlers) `cmd_userlist_cmd' now handles `GEN_PASSWORDS';
	  `cmd_view' handles DUMP_RUNS and DUMP_STANDINGS;
	  `cmd_userlist_cmd' handles `DUMP_USERS'.

	* protocol.h: copyright notice is updated;
	new server commands: DUMP_RUNS, DUMP_USERS, DUMP_STANDINGS.

	* master_html.c:
	(write_priv_standings) use of `do_write_kirov_standings' updated;
	  use of `do_write_standings' updated;
	(write_runs_dump) new function to write raw run information;
	(write_raw_standings) new function to write raw standings info.

	* master.c: copyright notice is updated;
	(print_dump_runs_button) new function to print "Dump runs database"
	  reference;
	(print_dump_users_button) new function to print "Dump users database"
	  reference;
	(print_dump_standings_button) new function to print
	  "Dump standings database" reference;
	(action_dump_runs) new function to perform "Runs dumping";
	(action_dump_users) new function to perform "Users dumping";
	(action_dump_standings) new function to perform "Raw standings" dump;
	(do_generate_passwords_if_asked) `serve_clnt_userlist_cmd' is used
	  instead of `serve_clnt_gen_passwords';
	(print_dump_buttons) new function to print all the "dump" references;
	(main) new actions handled: DUMP_RUNS, DUMP_USERS, DUMP_STANDINGS;
	  dump reference row is printed.

	* html.h: copyright notice is updated;
	(do_write_kirov_standings) prototype is updated;
	(do_write_standings) prototype is updated;
	(write_runs_dump) new function prototype;
	(write_raw_standings) new function prototype.

	* html.c:
	(do_write_kirov_standings) a new parameter `raw_flag' is added,
	  if this parameter is non-zero, the standings are printed
	  in semicolon-separated format to process them separately;
	(do_write_standings) a new parameter `raw_flag' - see above;
	(write_standings) use of `do_write_kirov_standings',
	  `do_write_standings' is updated;
	(write_virtual_standings) `do_write_standings' use is updated.

	* files.make: copyright notice is updated;
	new file userlist_clnt/dump_database.c;
	file serve_clnt/gen_passwords.c is renamed to
	  serve_clnt/userlist_cmd.c.

	* client_actions.h: copyright notice is updated;
	new client (master) actions: DUMP_USERS, DUMP_RUNS, DUMP_STANDINGS.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2003-01-28  Alexander Chernov  <cher@ispras.ru>

	* serve.c:
	(cmd_team_submit_run) language is not accepted, if it has `disabled'
	  flag set.

	* prepare.h, prepare.c:
	new language parameter `disabled', which is used to disable use
	  of a language for new submissions.

	* html.c: copyright notice is updated;
	(write_team_page) a language is not generated to language selection
	  menu, if `disabled' flag is set.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2003-01-27  Alexander Chernov  <cher@ispras.ru>

	* master_html.c: copyright notice is updated;
	(write_priv_source) language having invalid language id is printed
	  as an empty string.

	* filter_eval.c: copyright notice is updated;
	(do_eval) invalid problem id is converted to empty string;
	  invalid team id is converted to empty team login string;
	  invalid language id is converted to empty string.

	* clntutil.c: copyright notice is updated;
	(client_put_copyright) copyright notice is updated.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* ejudge.ru_RU.KOI8-R.po: Copyright notice is updated.

2003-01-06  Alexander Chernov  <cher@ispras.ru>

	* serve.c: copyright notice is updated;
	(cmd_team_submit_run) now uses `queue_compile_request';
	(read_compile_packet) serve->run interaction protocol is changed;
	(b32_number) new function to convert the given number to radix-32
	  number;
	(generate_packet_name) new function to generate an unique packet
	  name. The packet name is 11 characters long and contains only
	  digits and latin capitals;
	(queue_compile_request) new function to add a compile packet to
	  the corresponding compile queue;
	(rejudge_run) now uses `queue_compile_request';

	* run.c: copyright notice is updated;
	(generate_report) new parameter `score_system_val' which is used
	  instead of global configuration variable global->score_system_val;
	(generate_team_report) new parameter `score_system_val',
	  which is used instead of global configuration variable;
	  new parameter `report_error_code' which is used instead of
	  the global configuration variable;
	(run_tests) new parameter `team_enable_rep_view' which is used
	  instead of global configuration variable;
	  new parameter `report_error_code';
	  new parameter `score_system_val';
	  global->run_work_dir is used instead of global->tmp_dir;
	  tst->check_dir is used instead of tst->work_dir;
	(do_loop) incoming packets are now read from a single spool]
	  directory;
	  the run packet now containt the contest_id, the run_id, the
	  problem_id, accept_testing flag, locale_id, score_system_val
	  (the scoring system for this run), team_enable_rep_view flag,
	  report_error_code flag, exe_sfx executable suffix,
	  arch - architecture;
	  the incoming packet name is now unique and contain a random
	  component to enable using of one tester agent by several
	  contests;
	  the checker result is put to the output spool directories, path
	  to which now contain the contest_id.

	* prepare.h: copyright notice is updated;
	global parameters `teamdb_file', `passwd_file' are removed;
	new global parameter `compile_out_dir', not settable by user;
	new global parameter `compile_work_dir';
	new global parameter `run_out_dir', not settable by user;
	new global parameter `run_work_dir';
	new global parameter `run_check_dir';
	new global parameter `auto_short_problem_name';
	new problem parameter `tester_id';
	new language parameter `compile_id';
	compile parameters `server_root_dir', `server_var_dir',
	  `server_compile_dir', `server_queue_dir', `server_src_dir',
	  `compile_status_dir', `compile_report_dir', `queue_dir',
	  `work_dir' are removed;
	new language parameter `compile_dir';
	new language parameter `compile_queue_dir', `compile_src_dir',
	  `compile_out_dir' - not settable by user;
	new tester parameter `any';
	removed tester parameters: `server_root_dir', `server_var_dir',
	  `server_run_dir', `server_exe_dir', `server_queue_dir',
	  `run_status_dir', `run_report_dir', `run_team_report_dir',
	  `queue_dir', `tester_dir', `tmp_dir', `work_dir';
	new tester parameter `run_dir';
	new tester parameters `run_queue_dir', `run_exe_dir', `run_out_dir',
	  not settable by user;
	new tester parameter `check_dir'.

	* prepare.c:
	`teamdb_file', `passwd_file' global configuration parameters are
	  removed;
	`compile_queue_dir', `compile_src_dir', `compile_status_dir',
	  `compile_report_dir' global configuration variables are no longer
	   can be set by user;
	`compile_work_dir' - new global configuration parameter;
	`run_queue_dir', `run_exe_dir', `run_status_dir', `run_report_dir',
	  `run_team_report_dir' global configuration variables are no longer
	  can be set by user;
	`run_work_dir' - new global configuration parameter - a replacement
	  for tester->tmp_dir;
	`run_check_dir' - new global configuration parameter - a replacement
	  for tester->work_dir;
	`auto_short_problem_name' - new global configuration parameter;
	`tester_id' new problem parameter;
	`compile_id' new language parameter;
	`server_root_dir', `server_var_dir', `server_compile_dir',
	  `server_queue_dir', `server_src_dir', `compile_status_dir',
	  `compile_report_dir' language parameters are removed;
	`queue_dir', `work_dir' language parameters are removed;
	`compile_dir' - new language parameter - used by serve to place the
	  compilation request to the specific compilation queue;
	`any' - new tester parameter - default tester;
	`server_root_dir', `server_var_dir', `server_run_dir',
	  `server_exe_dir', `server_queue_dir', `run_status_dir',
	  `run_report_dir', `run_team_report_dir', `queue_dir',
	  `tester_dir', `tmp_dir', `work_dir' tester parameters are removed;
	run_dir - new tester parameter;
	check_dir - new tester parameter;
	(find_tester) function searches for default testers for the given
	  architecture when it cannot find precise tester;
	(tester_inheritance_info) updated according to changes in tester
	  parameters;
	(process_abstract_tester) abstract tester cannot be default tester;
	(set_defaults) updated to handle new configuration parameters;
	(collect_sections) compile_id is set to the language id, if the
	  former is not set;
	  tester_id is set to the problem id, if the former is not set;
	  default checkers are supported;
	(make_symlink) new function;
	(create_dirs) updated for the new serve<->compile and serve<->run
	  packet exchange scheme;
	(print_tester) removed all removed parameters.

	* parsecfg.c: copyright notice is updated;
	(parse_param) the input file is correctly closed.

	* master.c: copyright notice is updated;
	(read_state_params) `SID_URL' is supported properly (form headers
	  and hidden vars contain sid_mode and SID).

	* compile.c:
	GENERAL: serve<->compile interaction protocol is changed;
	copyright notice is updated (now is 2003);
	theory of operation is commented to be obsoleted;
	(do_loop) the incoming packets are watched only in a single
	  directory;
	  the compile packets have unique randomized names, which allows using
	  the same compilation agent for several contests;
	  the compile packet now contains the contest_id, the run_id, the
	  language_id and the locale_id (currently unused);
	  the compile result is written to the output directory, which path
	  is composed using the contest_id.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2002-12-30  Alexander Chernov  <cher@ispras.ru>

	* ALL_FILES: version 2.0 is released! 

2002-12-30  Alexander Chernov  <cher@ispras.ru>

	* userlist_proto.h:
	(struct userlist_pk_set_password) field `contest_id' is added.

	* userlist_clnt.h:
	(userlist_clnt_team_set_passwd) argument `contest_id' is added.

	* userlist-server.c:
	(team_set_password) the packet now has `contest_id' field, and this
	  contest is checked to allow team password change.

	* team.c:
	(action_change_password) `userlist_clnt_team_set_passwd' now
	  requires contest_id parameter;
	(main) password change dialog is not shown, if contest's flag
	  `disable_team_password' is set.

	* serve.c:
	new master commands "Clear run" and "Squeeze run log" are supported;
	(do_rename) new function, which renames archive entries by their
	  numbers;
	(do_remove_archive_entry) new function, which removes an archive
	  entry by its number;
	(do_squeeze_runs) a new function, which squeezes runs by
	  renaming archive entries and squeezing the runlog;
	(cmd_priv_command_0) `SRV_CMD_SQUEEZE_RUNS', `SRV_CMD_CLEAR_RUN'
	  are handled;
	(packet_handlers) `SRV_CMD_SQUEEZE_RUNS', `SRV_CMD_CLEAR_RUN'
	  are handled.

	* runlog.h: RUN_MAX_IP_LEN is moved to runlog.c;
	new run entry status RUN_EMPTY;
	(run_clear_entry) new function;
	(run_squeeze_log) new function.

	* runlog.c:
	(run_change_status) added check, that new status is not RUN_EMPTY;
	  added check, that the old status is not RUN_VIRTUAL_START,
	  RUN_VIRTUAL_STOP, RUN_EMPTY;
	(run_get_team_usage) RUN_VIRTUAL_START, RUN_VIRTUAL_STOP,
	  RUN_EMPTY entries are ignored;
	(run_get_attempts) RUN_VIRTUAL_START, RUN_VIRTUAL_STOP,
	  RUN_EMPTY entries are ignored;
	(run_status_str) RUN_EMPTY is supported;
	(run_set_entry) RUN_EMPTY entry cannot be changed;
	  RUN_VIRTUAL_START, RUN_VIRTUAL_STOP, RUN_EMPTY cannot be set by
	  this function;
	(run_build_virtual_table) RUN_EMPTY is ignored;
	(run_clear_entry) new function to clear runlog entry;
	(run_squeeze_log) new function to remove all cleared entries.

	* protocol.h:
	new commands: `SRV_CMD_CLEAR_RUN', `SRV_CMD_SQUEEZE_RUNS'.

	* master_html.c:
	(write_all_runs) `RUN_EMPTY' runlog entries are printed in special
	  way;
	  for `RUN_VIRTUAL_START', `RUN_VIRTUAL_STOP' "clear" button is
	  displayed instead of "change" button;
	  "Squeeze runs" button is added;
	(write_priv_source) `RUN_EMPTY' runlog entries are handled;
	  "Clear entry" button is displayed.

	* master.c:
	new master actions are supported: clear run and squeeze run log;
	(confirm_squeeze) new function;
	(confirm_clear_run) new function;
	(action_squeeze_runs) new function;
	(action_clear_run) new function;
	(main) new actions `CLEAR_RUN', `CLEAR_RUN_2', `SQUEEZE_RUNS',
	  `SQUEEZE_RUNS_2' are supported.

	* html.c:
	(new_write_user_runs) `RUN_EMPTY' runlog entries are ignored;
	(do_write_kirov_standings) the same;
	(do_write_standings) the same.

	* contests.h: new attribute `disable_team_password' is supported;
	(struct contest_desc) new field `disable_team_password'.

	* contests.c: new attribute `disable_team_password' is supported;
	(parse_contest) ditto.

	* client_actions.h:
	new actions added (CLEAR_RUN, CLEAR_RUN_2, SQUEEZE_RUNS,
	  SQUEEZE_RUNS_2).

2002-12-28  Alexander Chernov  <cher@ispras.ru>

	* team.c:
	(read_state_params) SID_URL handling is implemented properly.
	  In this case sid_mode and SID is generated into the form.
	(main) "Change language" dialog is implemented correctly for
	  all the session support modes.

2002-12-28  Alexander Chernov  <cher@ispras.ru>

	* serve.c:
	(update_standings_file) compiler warning about use of uninitialized
	  variable is fixed.

	* master_html.c:
	(write_all_runs) compiler warnings about use of uninitialized
	  variables are fixed;
	(write_all_clars) the same.

	* master.c:
	(send_msg_if_asked) compiler warning about use of uninitialized
	  variable is fixed.

	* html.c:
	(do_write_standings) compiler warning about use of uninitialized
	  variable is fixed.

	* contests.c:
	(parse_contest_xml) compiler warning about use of uninitialized
	  variable is fixed.

	* users.c: 
	(main) a backdoor is removed.

	* userlist-server.c:
	(login_team_user) "possibly use of unitialized variable" warning
	  is fixed;
	(cmd_login_priv_user) the same;
	(login_team_cookie) the same;
	(login_priv_cookie) the same;
	(do_list_users) in raw output mode if a team does not have
	  participants, it is now printed anyway;
	  invisible users are not printed in user lists.

	* team.c:
	(send_clar_if_asked) in virtual contest mode contest start and stop
	  times are not checked;
	(submit_if_asked) the same as above.

	* team.c:
	(display_enter_password) default session mode is 2 (SID_URL).

	* runlog.h: 
	(run_get_virtual_status) new function prototype.

	* runlog.c:
	(run_get_virtual_status) a new function, which returns the virtuality
	  status of the given user;
	(run_virtual_start) virtuality status of the user is set to virtual;
	(run_virtual_stop) checked, that the user is virtual.

	* prepare.h, prepare.c:
	new global parameters: `standings_virtual_team_color',
	  `standings_real_team_color'.

	* html.c:
	(do_write_standings) global parameters `standings_real_team_color',
	  `standings_virtual_team_color' are supported.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2002-12-27  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* team.c: GLOBAL CHANGE: virtual contest mode is supported;
	(make_self_url) `REDIRECT_URL' environment variable is checked;
	(print_standings_button) new function to print the standings button;
	(show_clar_if_asked) `print_nav_buttons' accepts 3 parameters instead
	  of 2;
	(request_source_if_asked) the same as above;
	(action_stangings) new function to generate virtual standings in
	  the virtual contest mode;
	(request_report_if_asked) `print_nav_buttons' accepts 3 parameters instead
	  of 2;
	(action_virtual_start) new function to start the virtual contest;
	(action_virtual_stop) new function to stop the virtual contest;
	(print_nav_buttons) now accepts 3 parameters instead of 2. The
	  second parameter is now "Virtual standings" label; the 3rd
	  parameter is "Log out" label;
	(main) client actions `ACTION_START_VIRTUAL', `ACTION_STOP_VIRTUAL',
	  `ACTION_STANGINGS' are supported;
	  `print_nav_buttons' accepts 3 parameters instead of 2.

	* serve.c: GLOBAL CHANGE: virtual contests are supported;
	(update_standings_file) fog time is not checked when in virtual
	  contest mode;
	(update_status_file) `is_virtual' flag of the status structure
	  is filled;
	  standings are never frozen in virtual contest mode;
	(cmd_team_show_item) `SRV_CMD_VIRTUAL_STANDINGS' request is
	  handled;
	(cmd_team_submit_run) virtual contests are supported: duration is
	  counted relative to the participant's contest start time;
	(cmd_team_submit_clar) the same as above;
	(cmd_command_0) a new function to handle unprivileged command with 0
	  or 1 parameter;
	  `SRV_CMD_VIRTUAL_START', `SRV_CMD_VIRTUAL_STOP' commands are
	  handled;
	(cmd_judge_command_0) a new function to handle commands with 0 or 1
	  parameter, which are allowed for any user with privileges;
	  `SRV_CMD_RESET_FILTER' command is handled;
	(packet_handlers) handlers for the new commands
	  `SRV_CMD_VIRTUAL_STOP', `SRV_CMD_VIRTUAL_START',
	  `SRV_CMD_VIRTUAL_STANDINGS', `SRV_CMD_RESET_FILTER' are added;
	(do_loop) fog period is not checked in virtual contest mode;
	  contest is never auto-started and auto-stopped in virtual contest
	  mode;
	(main) if virtual contest is requested for not SCORE_ACM scoring
	  system, an error is printed;
	  `run_build_virtual_table' is called in virtual contest mode.

	* runlog.h:
	new run entry statuses: `RUN_VIRTUAL_START', `RUN_VIRTUAL_STOP';
	(run_get_duration) new function prototype;
	(run_build_virtual_table) new function prototype;
	(run_get_virtual_start_time) new function prototype;
	(run_get_virtual_stop_time) new function prototype;
	(run_virtual_start) new function prototype;
	(run_virtual_stop) new function prototype.

	* runlog.c:
	(append_record) new static function to add a new record to the log;
	(run_add_record) `append_record' function is used to create a new
	  record;
	(run_change_status) status of `RUN_VIRTUAL_START', `RUN_VIRTUAL_STOP'
	  entries cannot be changed;
	(run_get_duration) a new function to return the contest duration;
	(run_status_str) `RUN_VIRTUAL_START', `RUN_VIRTUAL_STOP' are
	  supported;
	(run_set_entry) `RUN_VIRTUAL_START', `RUN_VIRTUAL_STOP' entries
	  cannot be edited;
	(struct vt_entry) new structure to hold the virtual contest status
	  for all the participants;
	(get_entry) new static function to create a new virtual participant
	  entry, if such does not exist, and return the entry;
	(run_build_virtual_table) new function to build the virtual
	  participation table by the run log;
	(run_get_virtual_start_time) new function to return the virtual
	  contest start time for the given user;
	(run_get_virtual_stop_time) new function to return the virtual
	  contest stop time for the given user;
	(run_virtual_start) new function to start the virtual contest for
	  the given user;
	(run_virtual_stop) new function to stop the virtual contest for
	  the given user.

	* protocol.h: (struct prot_serve_status) field `is_virtual' added;
	several new commands added: `SRV_CMD_VIRTUAL_START',
	  `SRV_CMD_VIRTUAL_STOP', `SRV_CMD_VIRTUAL_STANDINGS',
	  `SRV_CMD_RESET_FILTER';
	new error code: `SRV_ERR_ONLY_VIRTUAL'.

	* protocol.c: text for `SRV_ERR_ONLY_VIRTUAL' error is added.

	* prepare.h:
	two new global parameters added: `virtual', `standings_team_color'.

	* prepare.c: global parameters:
	  virtual - if set to 1, denotes virtual contest;
	  standings_team_color - may be set to some HTML color to highlight
	  the team's line on the virtual standings page.

	* master_html.c: (write_all_runs) virtual contests are handled;
	  "Reset filter" button is generated;
	  filter parse and execution errors are printed;
	  special output format for `RUN_VIRTUAL_START', `RUN_VIRTUAL_STOP'
	  runlog entries;
	  virtual participant's entries time is printed in virtual time;
	(write_all_clars) astronimic time is used in virtual contest mode;
	(write_priv_standings) use of `write_standings_header',
	  `do_write_standings' is updated due to changed parameters;
	(write_priv_source) source cannot be printed for `RUN_VIRTUAL_START'
	  and `RUN_VIRTUAL_STOP' entries;
	(write_priv_clar) astronomical time is used in virtual contest mode;
	(html_reset_filter) new function to reset the runlog filter to
	  its initial state.

	* master.c:
	(action_reset_filter) new function to send `SRV_CMD_RESET_FILTER'
	  command. Use to reset the filter to default state;
	(main) `ACTION_RESET_FILTER' is handled.

	* html.h: 
	(write_standings_header) prototype is changed;
	(do_write_standings) prototype is changed;
	(html_reset_filter) new function prototype added.

	* html.c: 
	(new_write_user_runs) virtual contests are supported;
	(new_write_user_clars) virtual contests are supported. In virtual
	  contest mode all clarification requests are replies are tagged
	  with astronomic time, not duration from the start;
	(new_write_user_clar) the same as above;
	(write_standings_header) two new parameters added: `user_id' and
	  `user_name'. They are used in virtual contest mode to print
	  personal standings;
	(do_write_kirov_standings) RUN_VIRTUAL_START and RUN_VIRTUAL_STOP
	  run statuses are ignored;
	(do_write_standings) new parameter `user_id' added. Used in virtual
	  contest mode to generate standings relative to the current virtual
	  time of the given participant;
	(write_standings) use of `write_standings_header' and
	  `do_write_standings' is updated to due changes in their parameters;
	(print_nav_buttons) new parameter `t3', which is now button label
	  for "Log Out", `t2' is now button label for "Virtual standings"
	  button;
	  "Virtual standings" button is printed;
	(time_to_str) new function;
	(write_team_page) virtual contest mode is supported. In this mode
	  general contest information section is also printed on the
	  server side;
	  use of `print_nav_buttons' updated;
	(write_virtual_standings) new function to print the user's virtual
	  standings.

	* clntutil.h: external declaration of `server_is_virtual' added.

	* clntutil.c: `server_is_virtual' global variable added;
	(client_check_server_status) `is_virtual' flag is read;
	(client_print_server_status) virtual contests are supported.

	* client_actions.h:
	several new actions added: virtual contest actions and reset filter
	  action.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2002-12-23  Alexander Chernov  <cher@ispras.ru>

	* teamdb.h: (teamdb_toggle_ban) prototype removed;
	(teamdb_toggle_vis) prototype removed;
	(teamdb_toggle_flags) new function prototype added.

	* teamdb.c: (teamdb_toggle_vis) function removed;
	(teamdb_toggle_ban) function removed;
	(teamdb_toggle_flags) a new function to request visibility/ban
	  flag toggling from the userlist-server.

	* serve.c:
	(cmd_priv_command_0) `SRV_CMD_TOGGLE_VISIBILITY', `SRV_CMD_TOGGLE_BAN'
	  commands are supported;
	(packet_handlers) packet handler for the commands above added.

	* protocol.h:
	new server commands: SRV_CMD_TOGGLE_VISIBILITY, SRV_CMD_TOGGLE_BAN.

	* master.c: user banning/making invisible is now supported;
	(action_toggle_visibility) a new function to request toggle of
	  user visibility status;
	(action_toggle_ban) a new function to request toggle of user ban
	  status;
	(main) client actions `ACTION_USER_TOGGLE_BAN',
	  `ACTION_USER_TOGGLE_VISIBILITY' are supporting by calling the
	  corresponding functions (described above).

2002-12-22  Alexander Chernov  <cher@ispras.ru>

	* makefile:
	ChangeLog for userlist_clnt, serve_clnt, charsets subdirectories
	  is updated with `log' rule.

2002-12-22  Alexander Chernov  <cher@ispras.ru>

	* master.c:
	GLOBAL CHANGE: new protocol (UNIX socket-based) of master-serve
	  communication is implemented;
	GLOBAL CHANGE: new session support is implemented (including
	  implementation of cookie support, which is now on by default);
	due to the above changes the code is almost totally rewritten;
	configuration parameters removed: `conf_dir', `pipe_dir',
	  `judge_dir', `judge_cmd_dir', `judge_data_dir';
	"client_actions.h" is included;
	<ctype.h> is included;
	session mode enumerated constants SID_* are defined;
	(read_state_params) `action' or `action_' cgi parameter is parsed;
	  `form_start_simple', `form_start_multipart', `hidden_vars' are
	  generated depending on the current session mode;
	(make_self_url) `SERVER_PORT' environment variable is not used, since
	  it is already contained in HTTP_HOST environment variable;
	(hyperref) new function to print self-referencing url depending on
	  the current session support mode;
	(set_cookie_if_needed) new function to send a cookie to client,
	  if it is needed;
	(display_enter_password) `set_cookie_if_needed' is called;
	  session support selection dialog is generated;
	(get_cookie) new function to parse cookie string;
	(ask_passwd) removed in favor of `authentificate';
	(check_passwd) removed in favor of `authentificate';
	(open_userlist_server) new function to open userlist-server
	  connection;
	(permission_denied) new function to report the corresponging error;
	(fatal_server_error) new function to report the corresponging error;
	(is_auth_error) new function, which returns 1, if the given
	  error code is authentification error;
	(get_session_id) new function, which parses session id from CGI
	  parameters;
	(client_put_refresh_header) new function, which generates
	  auto-refreshing http header;
	(authentificate) new function to authentificate users, supporting
	  all session modes;
	(print_refresh_button) all session support modes implemented;
	(print_standings_button) all session support modes implemented;
	(print_update_button) all session support modes implemented;
	(print_teamview_button) all session support modes implemented;
	(print_logout_button) new function to print "Log out" button;
	(print_reset_button) all session support modes implemented;
	(print_regenerate_button) all session support modes implemented;
	(print_suspend_button) all session support modes implemented;
	(print_resume_button) all session support modes implemented;
	(operation_status_page) new function to generate page to
	  show the result of operation;
	(start_if_asked) new protocol supported, `operation_status_page'
	  is called;
	(stop_if_asked) the same as above;
	(update_standings_if_asked) the same as above;
	(changedur_if_asked) the same is above;
	(sched_if_asked) the same as above;
	(change_status_if_asked) the same as above;
	(change_status) new function to support status changing from
	  source view page;
	(change_problem) new function, which implements problem changing
	  from source view page;
	(change_language) new function, which implements language changing
	  from source view page;
	(change_user_id) new function, which implements user_id changing
	  from source view page;
	(change_user_login) new function, which implements user login
	  changing from source view page;
	(view_one_team_if_asked) removed;
	(do_team_action_if_asked) removed;
	(add_team_if_asked) removed;
	(view_source_if_asked) new protocol, and session modes supported;
	(view_report_if_asked) the same as above;
	(view_teams_if_asked) the same as above;
	(confirm_reset_if_asked) new session support mode implemented;
	(confirm_regenerate_if_asked) the same as above;
	(confirm_update_standings) new function;
	(confirm_rejudge_all) new function;
	(do_contest_reset_if_asked) new session support mode implemented;
	  new protocol is supported;
	(do_generate_passwords_if_asked) the same;
	(do_suspend_if_asked) the same;
	(do_resume_if_asked) the same;
	(do_rejudge_all_if_asked) the same;
	(do_rejudge_problem_if_asked) the same;
	(view_clar_if_asked) defined `static';
	  new session support is implemented;
	  new protocol is supported;
	(send_msg_if_asked) the same as above;
	(send_reply_if_asked) the same as above;
	(view_standings_if_asked) the same as above;
	(log_out_if_asked) new function to log out user (remove all cookies);
	(set_defaults) all removed configuration parameters are no longer
	  supported;
	  `client_make_form_headers' is called with `self_url' argument;
	(open_serve) if connection cannot be established, fatal error is
	  reported;
	(display_master_page) server connection is explicitly opened;
	  the current sid_mode is passed to the server;
	(print_nav_buttons) new function to print navigation buttons;
	(main) new `authentificate' function is used instead of old
	  `ask_passwd', `check_passwd', etc;
	  the action is chosen depending on the client_actions value;
	  `print_nav_buttons' is used.

	* master_html.c:
	"fileutl.h", "client_actions.h", "sformat.h" is included;
	session mode enumeration constants SID_* are defined;
	(html_start_form) new function to start a form depending on the
	  current session mode;
	(html_hyperref) a new function to print self-reference hyperref
	  depending on the current session mode;
	(print_nav_buttons) new function to print navigation buttons;
	(write_change_status_dialog) new function to generate html for
	  run status change dialog;
	(write_all_runs) new parameters `sid_mode', `sid';
	  new session support is implemented;
	(write_all_clars) new parameters `sid_mode', `sid';
	  new session support mode is implemented;
	(write_master_page) new parameters `sid_mode', `sid',
	  which are passed to the above function;
	(write_priv_standings) new function to print the current standings;
	(write_priv_source) new function;
	(write_priv_report) new function;
	(write_priv_clar) new function;
	(write_priv_users) new function.

	* html.h: (write_runs_table) removed;
	(write_clars_table) removed;
	(write_clar_view) removed;
	(write_team_statistics) removed;
	(write_judge_allstat) removed;
	(write_judge_source_view) removed;
	(write_judge_report_view) removed;
	(write_judge_standings) removed;
	(write_judge_teams_view) removed;
	(write_judge_one_team_view) removed;
	(new_write_user_runs) prototype changed;
	(new_write_user_clars) prototype changed;
	(write_team_page) prototype changed;
	(write_master_page) parameters `sid_mode', `sid' are added;
	(write_priv_standings) prototype added;
	(write_standings_header) prototype added;
	(do_write_kirov_standings) prototype added;
	(do_write_standings) prototype added;
	(write_priv_source) prototype added;
	(write_priv_report) prototype added;
	(write_priv_clar) prototype added;
	(write_priv_users) prototype added;
	(html_start_form) prototype added;
	(html_hyperref) prototype added.

	* html.c: "client_actions.h" included;
	session support mode enumeration SID_* is defined;
	(write_clar_view) removed;
	(new_write_user_runs) parameters changed: `form' is removed, but
	  `sid_mode', `sid', `self_url', `hidden_vars' are added;
	  function is updated for new session support mode;
	(new_write_user_clars) parameters changed the same way as above;
	  new session support is implemented;
	(write_team_statistics) removed;
	(write_standings_header) new function;
	(do_write_kirov_standings) `header_str' is removed, the header is
	  printed in a separate function (above);
	  global parameter `ignore_compile_errors' is honored;
	  function is no longer static (used from master_html.c);
	(do_write_standings) `header_str' parameter is removed;
	  global parameter `ignore_compile_errors' is supported;
	  function is no longer static;
	(write_standings) `write_standings_header' is called;
	  parameters for do_write_*_standings are updated;
	(do_write_public_log) global parameter `ignore_compile_errors'
	  is supported;
	(write_judge_allruns) removed; similar function is now
	  in master_html.c;
	(write_judge_allclars) removed;
	(write_judge_allstats) removed, similar function is now in
	  master_html.c;
	(write_judge_source_view) removed;
	(write_judge_report_view) removed;
	(write_judge_standings) removed;
	(write_judge_teams_view) removed;
	(print_nav_buttons) new function;
	(write_judge_one_team_view) removed;
	(write_team_page) parameters are changed to support the new
	  session model;

	* makefile: libserve_clnt.a: rule uses ${SERVE_CLNT_CFILES} variable.

	* files.make: new userlist_clnt files: `logout.c', 'priv_cookie.c'.
	all serve_clnt files are now defined in a separate variable
	  `SERVE_CLNT_CFILES';
	client_actions.h added.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* clntutil.h: variables `client_pipe_dir', `client_cmd_dir',
	  `form_header_simple_ext', `form_header_multipart_ext' removed;
	(client_puts) removed;
	(client_make_form_header) accepts a parameter `self_url';
	(client_make_pipe) removed;
	(client_packet_name) removed;
	(client_get_reply) removed;
	(client_transaction) removed;
	(client_file_to_str) removed;
	(client_file_to_stdout) removed;
	(client_split) removed.

	* clntutil.c: "client_actions.h" is included;
	global variables `client_pipe_dir', `client_cmd_dir',
	  `form_header_simple_ext', `form_header_multipart_ext' are removed;
	(client_packet_name) removed;
	(client_make_pipe) removed;
	(client_get_reply) removed;
	(client_transaction) removed;
	(client_print_server_status) action codes are printed for
	  administrator's control buttons instead of commands;
	(client_make_form_headers) self_url parameter added;
	  form_header_simple_ext, form_header_multipart_ext are not
	  generated;
	(client_file_to_str) removed;
	(client_file_to_stdout) removed.

	* team.c:
	(initialize) `program_name' global variable is no longer used;
	  `self_url' is passed as an argument to `client_make_form_headers'.

	* prepare.c:
	new global parameters `ignore_compile_errors'. If set, compile
	  errors are not counted as failed runs and does not increase
	  penalty;
	global parameters `pipe_dir', `judge_dir', `judge_cmd_dir',
	  `judge_data_dir' are removed.
	(set_defaults) removed parameters are not handled;
	(create_dirs) removed parameters are not handled.

	* prepare.h:
	new global parameters `ignore_compile_errors'. If set, compile
	  errors are not counted as failed runs and does not increase
	  penalty;
	global parameters `pipe_dir', `judge_dir', `judge_cmd_dir',
	  `judge_data_dir' are removed.

	* protocol.c: new error messages added.

	* protocol.h: many new commands (mostly privileged) are added;
	several new errors added;
	(struct prot_serve_pkt_submit_clar) new fields: `dest_user_id',
	  `ref_clar_id', `dest_login_len', used by privileged message
	  sending;
	(struct prot_serve_pkt_team_page) fields `user_id', `contest_id',
	  `ip', `simple_form_len', `multi_form_len' removed;
	  fields `sid_mode', `self_url_len', `hidden_vars_len' added;
	(struct prot_serve_pkt_master_page) field `sid_mode' added;
	(struct prot_serve_pkt_standings) new packet;
	(struct prot_serve_pkt_view) new packet;
	(struct prot_serve_pkt_simple) new packet;
	(struct prot_serve_pkt_run_info) new packet.

	* runlog.h:
	(run_get_attempts) a new parameter added. If this parameter is 1,
	  all compile error runs are not counted;
	new enumeration for all `run_entry' fields (used in run_set_entry).
	(run_get_entry) new function;
	(run_set_entry) new function.

	* serve.c:
	GLOBAL CHANGE: new UNIX-socket based protocol is implemented
	  for master and judge;
	(struct client_state) `cookie', `ip' are saved;
	(report_to_client) removed;
	(report_error) removed;
	(report_bad_packet) removed;
	(report_ok) removed;
	(check_period) removed;
	(get_peer_local_user) IP-address is requested from the server
	  and saved in the `struct client_state';
	  cookie is saved in `struct client_state';
	(cmd_team_get_archive) team archive directory is created in var_dir
	  for now (since pipe_dir has gone);
	(cmd_team_list_runs) actual action are commented for now, since
	  their parameters changed, and the needed parameters are not
	  directly available. Protocol should be updated.
	(cmd_team_page) packet is changed, so the function is updated;
	(cmd_master_page) `sid_mode' is checked and passed to
	  `write_master_page';
	(cmd_priv_standings) new function;
	(cmd_view) new function;
	(cmd_message) new function;
	(cmd_gen_passwords) new function;
	(cmd_team_submit_clar) error of `generic_write_file' is checked;
	(cmd_priv_command_0) new function - handled many privileged protocol
	  commands;
	(process_judge_reply) removed;
	(judge_stat) removed;
	(judge_standings) removed;
	(judge_update_public_standings) removed;
	(judge_view_clar) removed;
	(judge_view_report) removed;
	(cmd_edit_run) new function;
	(judge_view_src) removed;
	(judge_start) removed;
	(judge_stop) removed;
	(judge_sched) removed;
	(judge_time) removed;
	(judge_change_status) removed;
	(judge_reply) removed;
	(judge_view_teams) removed;
	(judge_view_one_team) removed;
	(judge_change_team_login) removed;
	(judge_change_team_name) removed;
	(judge_change_team_password) removed;
	(judge_change_team_vis) removed;
	(judge_change_team_ban) removed;
	(do_add_team) removed;
	(judge_add_team) removed;
	(judge_message) removed;
	(do_rejudge_all) new function to rejudge all the runs;
	(judge_rejudge_all) removed;
	(do_rejudge_problem) new function to rejudge only particular problem;
	(judge_rejudge_problem) removed;
	(judge_reset_contest) removed;
	(judge_suspend_clients) removed;
	(judge_resume_clients) removed;
	(judge_generate_passwords) removed;
	(judge_cmds) removed;
	(read_judge_packet) removed;
	(packet_handlers) many new packet handlers are added;
	(do_loop) `judge_cmd_dir' is no longer scanned;
	(write_submit_templates) removed, as nobody uses that templates;
	(main) `write_submit_templates' is no longer called.

	* team.c: GLOBAL CHANGE: cookie support is implemented;
	"misctext.h", "client_actions.h" are included;
	<ctype.h> is included;
	new global parameter `enable_session_mode' to enable the dialog
	  about supported session modes. By default dialog is disabled,
	  and cookies are used;
	(setup_locale) new function to set locale;
	(make_self_url) new function to make a self-referencing URL;
	(hyperref) new function to make self-hyperreference;
	(open_serve) new function to open the contest-server connection;
	(set_cookie_if_needed) new function to send the cookie to client;
	(set_defaults) contest-server connection is now opened on demand;
	  self-reference URL is constructed;
	(read_state_params) `form_start_simple', `form_start_multipart'
	  are constructed depending on the current session mode;
	  hidden_vars is also constructed;
	  `client_action' is read from CGI parameters;
	(display_enter_password) rewritten;
	(get_cookie) a new function to parse cookie from the environment;
	(open_userlist_server) a new function to open userlist-server
	  connection;
	(permission_denied) a new function to report error;
	(fatal_server_error) a new function to report error;
	(is_auth_error) a new function, which returns 1, if the given
	  error code is due to failed authentification;
	(get_session_id) a new function, which parses session_id from
	  CGI parameters;
	(client_put_refresh_header) a new function, which generates
	  auto-refresh header;
	(authentificate) a new function to perform the operation;
	(operation_status_page) a new function, which displays (possibly
	  auto-refreshed) page with the status of the current operation;
	(print_refresh_button) rewritten;
	(print_logout_button) new function;
	(send_clar_if_asked) `operation_status_page' is used instead of
	  `error';
	  contest server connection is opened immediately before sending
	  clarification request;
	(submit_if_asked) `operation_status_page' is used instead of `error';
	(action_change_password) renamed from `change_password_if_asked';
	  the old password is also taked from CGI-parameters;
	  `operation_status_page' is used instead of `error';
	  userlist-server connection is opened immediately before operation;
	(show_clar_if_asked) `set_cookie_if_needed' is called before
	  client_put_header;
	  navigation buttons are printed using `print_nav_buttons';
	  contest-server connection is opened immediately before operation;
	(request_source_if_asked) the same as above;
	(request_report_if_asked) the same as above;
	(request_archive_if_asked) redundant check for the new client-serve
	  mode is removed;
	  contest-server connection is opened immediately before operation;
	  `operation_status_page' is used instead of `error';
	(action_change_language) a new function to reload the page
	  (clear POST-submitted vars);
	(action_logout) a new function;
	(display_team_page) contest-server connection is opened immediately
	  before operation;
	  parameters of `serve_clnt_team_page' changed;
	(print_nav_buttons) new function;
	(read_locale_id) new function;
	(main) locale setting code is separated into two functions:
	  `read_locale_id', `setup_locale';
	  `authentificate' is used for authentification;
	  `client_action' variable's value is used to perform the requested
	  action;
	  `set_cookie_if_needed' is called before `client_put_header';
	  `print_nav_buttons' is used instead of `print_refresh_button';
	  old password is requested to change password.

	* userlist-server.c:
	(struct client_state) added fields `cookie', `ip' to save the
	  corresponding parameters of the client;
	(remove_cookie) fixed bug, when all the user's cookies are removed
	  when the last cookie in the list is removed;
	(login_user) user IP-address and cookie are saved;
	(login_team_user) the same as above;
	(cmd_login_priv_user) current privilege level is saved in the cookie;
	  user IP-address and cookie are saved;
	(login_cookie) user IP-address and cookie are saved in
	  `struct client_state';
	(login_team_cookie) cookie with privilege level == 0 and matching
	  contest_id is searched;
	  user IP-address and cookie are saved in `struct client_state';
	(login_priv_cookie) a new function;
	(logout_user) completely rewritten;
	(cmd_get_uid_by_pid) verbosity decreased;
	  cookie and IP-address is returned in the packet;
	(process_packet) `ULS_PRIV_CHECK_COOKIE' is supported.

2002-12-21  Alexander Chernov  <cher@ispras.ru>

	* runlog.c:
	(run_get_attempts) new parameter `skip_ce_flag'. If this parameter
	  is set to non-zero value, runs that have RUN_COMPILE_ERR status
	  are ignored instead of counting compile error as a failed submit
	  and incuring penalties;
	(run_get_entry) new function, which exports the given entry into
	  `struct run_entry' structure;
	(run_set_entry) a new functon, which sets the specified by the mask
	  fields fields uf `struct run_entry'.

	* serve_clnt.h:
	(serve_clnt_team_page) removed parameters: `user_id', `contest_id',
	  `ip', `simple_form', `milti_form';
	  added parameters: sid_mode, self_url, hidden_vars;
	(serve_clnt_standings) new function prototype;
	(serve_clnt_view) new function prototype;
	(serve_clnt_message) new function prototype;
	(serve_clnt_gen_passwords) new function prototype;
	(serve_clnt_simple_cmd) new function prototype;
	(serve_clnt_edit_run) new function prototype.

	* userlist_clnt.h: 
	(userlist_clnt_get_uid_by_pid) parameter `p_ip' added;
	(userlist_clnt_priv_cookie) new function prototype;
	(userlist_clnt_logout) new function prototype.

	* userlist_proto.h:
	(struct userlist_pk_check_cookie) field `priv_level' added;
	(struct userlist_pk_do_logout) fields `origin_ip', `user_id' removed;
	(struct userlist_pk_uid) `ip' field added.

	* client_actions.h: many new client action codes added.

	* teamdb.h: 
	(teamdb_lookup_login) implemented for the client mode;
	(teamdb_scramble_passwd) removed;
	(teamdb_check_scrambled_passwd) removed;
	(teamdb_check_passwd) removed;
	(teamdb_set_scrambled_passwd) removed;
	(teamdb_get_plain_passwd) removed;
	(teamdb_get_write_passwd) removed;
	(teamdb_write_teamdb) removed;
	(teamdb_is_valid_login) removed;
	(teamdb_is_valid_name) removed;
	(teamdb_change_login) removed;
	(teamdb_change_name) removed;
	(teamdb_add_team) removed;
	(teamdb_transaction) removed;
	(teamdb_commit) removed;
	(teamdb_rollback) removed;
	(teamdb_regenerate_passwords) parameter changed: now plain file
	  descriptor is accepted and passed directly to userlist-server;
	(teamdb_get_uid_by_pid) new parameter `p_ip' added;
	(struct teamdb_export) fields `scrambled', `passwd' are removed.

	* teamdb.c: 
	(teamdb_lookup_login) implemented for the client mode;
	(teamdb_scramble_passwd) removed;
	(teamdb_check_scrambled_passwd) removed;
	(teamdb_check_passwd) removed;
	(teamdb_set_scrambled_passwd) removed;
	(teamdb_get_plain_passwd) removed;
	(teamdb_get_write_passwd) removed;
	(teamdb_write_teamdb) removed;
	(teamdb_is_valid_login) removed;
	(teamdb_is_valid_name) removed;
	(teamdb_change_login) removed;
	(teamdb_change_name) removed;
	(teamdb_add_team) removed;
	(teamdb_transaction) removed;
	(teamdb_commit) removed;
	(teamdb_rollback) removed;
	(teamdb_regenerate_passwords) parameter changed: now plain file
	  descriptor is accepted and passed directly to userlist-server;
	(teamdb_get_uid_by_pid) new parameter `p_ip' added.

	* sformat.c:
	(sformat_message) 'Mp' and 'Ms' format specifiers are no longer
	  supported, as this information (plain password and scrambled
	  password) is no longer available to the server.

2002-12-20  Alexander Chernov  <cher@ispras.ru>

	* client_actions.h: Initial revision

2002-12-15  Alexander Chernov  <cher@ispras.ru>

	* serve.c:
	(cmd_master_page) the user is checked to have privilege level
	  at least at PRIV_LEVEL_OBSERVER.

2002-12-14  Alexander Chernov  <cher@ispras.ru>

	* filter_scan.lex: keyword "and" is synonim for "&&";
	keyword "or" is synonim for "||".

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* run.c:
	(run_tests) reverted back previous behavour: output files are
	  created with 0600 (read-write) permissions, as DOS programs
	  otherwise do not work.

	* master_html.c:
	(write_all_runs) "Rejudge problem" and "Rejudge all" buttons
	  only appears in PRIV_LEVEL_ADMIN privileges.

	* master.c:
	(change_status_if_asked) since the number of failed tests and
	  the gained score cannot be edited, the corresponding CGI
	  variables are not parsed, and -1 is always passed to the server.

	* userlist_xml.c: "protocol.h" is included;
	"priv_level" cookie attribute is generally supported
	  (parsed and unparsed);
	(parse_priv_level) a new function to parse the attribute;
	(parse_cookies) "priv_level" attribute is handled;
	(unparse_cookies) "priv_level" attribute is handled.

	* userlist_proto.h: privilege level enumeration is defined;
	new commands `ULS_PRIV_LOGIN', `ULS_PRIV_CHECK_COOKIE' are added;
	"char[0]" is no longer used in all the packet structures, "char[N]" is
	  used, where N is the number of text parameters for the packet;
	(userlist_pk_do_login) new field `priv_level';
	(userlist_pk_login_ok) new field `priv_level';
	(userlist_pk_uid) new field `priv_level'.

	* userlist_clnt.h:
	(userlist_clnt_get_uid_by_pid) new parameter `p_priv_level' added;
	(userlist_clnt_priv_login) new function prototype added.

	* userlist.h: privilege level enumeration is defined;
	new attribute `priv_level' is added;
	(struct userlist_cookie) `priv_level' field is added.

	* userlist-server.c:
	(struct client_state) field `priv_level' is added;
	(cmd_login_priv_user) a new function to handle `ULS_PRIV_LOGIN';
	(cmd_get_uid_by_pid) `priv_level' is returned to the client;
	(process_packet) `ULS_PRIV_LOGIN' request is handled.

	* teamdb.h: 
	(teamdb_get_uid_by_pid) new parameter `p_priv_level' added.

	* teamdb.c:
	(teamdb_get_uid_by_pid) a new parameter `p_priv_level' is accepted
	  and passed directly to the underlying userlist_clnt function.

	* serve_clnt.h:
	(serve_clnt_master_page) `flags' parameter is renamed to `priv_level'.

	* serve.c:
	(struct client_state) new field `priv_level' to store the privilege
	  level for the connected user;
	(get_peer_local_user) `priv_level' is requested;
	  success condition is "r >= 0", not "r > 0";
	(cmd_pass_descriptors) `get_peer_local_user' is commented out;
	(cmd_master_page) new function to display the master page;
	(packet_handlers) reference to `cmd_master_page' is added;
	(check_sockets) when `process_packet' is done, the client state
	  descriptor `p' is checked to be valid, since the connection
	  may be closed during request processing. Only if client state
	  descriptor is valid, its read buffers are cleaned up.

	* protocol.h: new request `SRV_CMD_MASTER_PAGE';
	the privilege level enumeration is defined;
	(struct prot_serve_pkt_master_page) new packet structure;
	(protocol_priv_level_str) new function prototype is added.

	* protocol.c: <reuse/logger.h> is included;
	(protocol_priv_level_str) a new function.

	* master_html.c: "html.h" is included;
	the client state is moved into the structure `struct user_state_info',
	  which is separate for each admin user, the array of references
	  to these structures is `users';
	(parse_error_func) uses `cur_user' user state pointer to append
	  messages;
	(write_all_runs) new parameter `u' - user state information;
	  `mode' parameter is renamed to `priv_level';
	(write_all_clars) new parameter `u' - user state information;
	  `mode' parameter is renamed to `priv_level';
	(allocate_user_info) new function to create a new user state
	  structure, if needed;
	(write_master_page) new parameter `user_id';
	  `mode' parameter is renamed to `priv_level'.

	* master.c:
	GENERAL CHANGE: the `master' utility now uses `userlist-server'
	  authentification, uses socket to pass requests to the contest
	  server (only master_page is currently passed this way);
	new includes: "serve_clnt.h", "contests.h", "protocol.h",
	  "userlist_proto.h", "userlist_clnt.h";
	removed configuration parameters: `contest_name', `password',
	  `problems_submit_file', `standings_url';
	added new configuration parameters: `contest_id', `socket_path',
	  `contests_path', `serve_socket';
	(read_state_params) "view_all_runs", "view_all_clars" CGI parameters
	  are now handled in another function;
	  `login' variable is generated to the hidden variables;
	  `password' is html-armored;
	  previously commented stuff is removed;
	(make_self_url) a new function to make a self-reference URL;
	(display_enter_password) displays login and password text fields;
	(ask_passwd) checks both login and password;
	(check_passwd) uses `userlist-server' for authentification;
	(read_view_params) new function: reads and parses CGI-parameters for
	  filtering and displaying runs and clars;
	(view_teams_if_asked) `priv_level' variable is used instead
	  `judge_mode';
	(view_clar_if_asked) the same;
	(navigate_if_asked) completely removed;
	(clar_navigate_if_asked) completely removed;
	(get_contest_statistics) removed;
	(set_defaults) handling of `password' parameter removed;
	  handling of `problems_submit_file' is removed;
	  `contest_id', `serve_socket' are handled;
	(parse_client_ip) new function to parse the IP to binary form;
	(initialize) `priv_level' variable is set depending on the program
	  name;
	  contest_id is checked to be valid;
	  the client IP-address is parsed;
	  the self-reference URL is prepared;
	(open_serve) a new function, which opens contest server connection;
	(display_master_page) a new function to request the contest server
	  to generate the master page;
	(main) view parameters are parsed with `read_view_params';
	  `priv_level' variable is used instead `judge_mode';
	  previously commented stuff is completely removed;
	  the contest server is requested to generate list of runs and clars,
	  and the socket file descriptor is passed;
	  write message dialog is displayed, if privelege level >= JUDGE.

	* makefile:
	file lists for `master', `serve', `register', `userlist-server',
	  `edit-userlist', `filter_test' utilities changed;
	file list for libserve_clnt.a changed;
	`master' now requires expat.

	* html.h: 
	(write_master_page) a new function prototype is added.

	* files.make: files added: userlist_clnt/priv_login.c, master_html.c,
	  serve_clnt/master_page.c.

	* contests.h:
	new element tags: <privileged_users>, <administrator>, <judge>,
	  <observer>;
	(struct contest_desc) new field `priv_users'.

	* contests.c: 
	(parse_contest) <privileged_users> element is supported.

	* clntutil.c:
	(client_print_server_status) `read_only' function parameter is renamed
	  to `priv_level' function parameter. `priv_level' is checked to
	  be PRIV_LEVEL_ADMIN to display contest parameter change controls.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2002-12-13  Alexander Chernov  <cher@ispras.ru>

	* run.c:
	(run_tests) the team program output file is created with mode
	  0200 (write-only);
	  the team program output file modes are changed to 0600 after the
	  program is completed.

	* filter_tree.h: 
	(filter_expr_set_string) parameter `errfunc' added;
	(filter_expr_init_parser) parameter `errfunc' added;
	extern variable `filter_expr_nerrs' added;
	extern variable `filter_expr_lval' added.

	* filter_tree.c: YYSTYPE macro is properly defined.

	* filter_test.c:
	`renties' field is renamed to `rentries' field in filter_env;
	(filter_runs) output format is changed;
	(main) call of `filter_expr_set_string' updated;
	  call of `filter_expr_init_parser' updated.

	* filter_scan.lex:
	system includes are moved after the local includes;
	global static variable `scan_err' added;
	all errors are reported using `scan_err' function pointer;
	(local_err_func) new function: default error printing;
	(filter_expr_set_string) new parameter `errfunc'.

	* filter_expr.y: global static variable `parse_err' is defined;
	YYERROR_VERBOSE macro is defined;
	all errors are reported using `parse_err' function pointer;
	(filter_expr_init_parser) an extra parameter `errfunc' added.

	* filter_eval.h:
	(struct filter_env) field `renties' is renamed to `rentries'.

	* filter_eval.c: YYSTYPE macro is properly defined;
	`renties' is renamed to `rentries'.

	* clntutil.c: 
	(client_puts) function removed as nobody now uses it.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* serve_clnt.h:
	(serve_clnt_master_page) a new function prototype is added.

	* teamdb.c:
	(restore_connection) error codes, returned by the userlist_clnt
	  routines are negative;
	(teamdb_get_uid_by_pid) error codes from
	  `userlist_clnt_get_uid_by_pid' are negative;
	  the actual error code is returned.

	* userlist-server.c:
	(cmd_get_uid_by_pid) negative error codes are returned on error;
	(do_work) when `process_packet' finished, the client_state
	  descriptor may be invalid since freed during processing of the
	  request, so the pointer must be revalidated and only after that
	  the structure may be updated.

	* master_html.c: Initial revision

2002-12-11  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* userlist-server.c: 
	(login_team_user) the ban check is fixed;
	(login_team_cookie) the ban check is fixed.

	* runlog.h: `RUN_LOG_READONLY' new constant added;
	(struct run_header) moved here from runlog.c;
	(struct run_entry) moved here from runlog.c;
	(run_get_header) new function prototype;
	(run_get_all_entries) new function prototype.

	* runlog.c:
	structs `run_header' and `run_entry' are moved to runlog.h;
	(run_open) new `RUN_LOG_READONLY' flag is supported;
	(run_get_header) new function to copy the log header to the user's
	  location;
	(run_get_all_entries) new function to copy the whole log to the
	  user's location.

	* prepare.c: 
	(set_defaults) one debugging print is removed.

	* makefile: filter_test added to targets;
	rule for compiling filter_test changed to include all the necessary
	  stuff to lookup the real run database.

	* filter_tree.h, filter_tree.c, filter_test.c: completed.

	* filter_scan.lex: completed

	* filter_expr.y: completed.

	* files.make: filter_eval.[ch] module added.

	* filter_eval.h, filter_eval.c: Initial revision

2002-12-09  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* filter_expr.y: in progress...

	* filter_tree.h: FILTER_ERR_* constants are added;
	(filter_tree_new_dur) function prototype added;
	(filter_tree_eval_node) function prototype added;
	(filter_strerror) function prototype added.

	* filter_tree.c: <errno.h> and <limits.h> included;
	(filter_tree_new_dur) new function;
	(str_to_int) new function;
	(filter_tree_eval_node) new function;
	(filter_strerror) new function.

	* filter_scan.lex: rule for octal literals is fixed.

2002-12-08  Alexander Chernov  <cher@ispras.ru>

	* filter_test.c, filter_tree.h, filter_tree.c, filter_scan.lex, filter_expr.y:
	Initial revision

	* makefile:
	userlist_clnt.c is removed and replaced with libuserlist_clnt.a;
	clean rule is updated;
	deps ruls is removed;
	version.c now depends on OTHERFILES as well;
	libuserlist_clnt.a rule are added;
	experimental rules for filter expression parsing are added.

	* files.make: OTHERFILES variable added.

	* files.make:
	new variable USERLIST_CLNT_CFILES to list all the modules in
	  userlist_clnt subdirectory;
	filter_test.c, filter_tree.[ch] modules are added;
	userlist_clnt.c is removed;
	userlist_clnt/private.h is added.

	* userlist_cfg.h:
	(struct userlist_cfg_user_map) a new structure to store the
	  parsed mapping from the system uids to the local uids;
	(struct userlist_cfg) `user_map' field is added.

	* userlist_cfg.c: new tags: `user_map', `map';
	new attributes `system_user', `local_user';
	(parse_user_map) a new function;
	(userlist_cfg_parse) <map> element is handled;

	* userlist-server.c:
	(detach_contest_extra) `vintage' of the shared data is set to the
	  invalid value just for the client to mention the change;
	(update_userlist_table) BANNED teams are also added to the table;
	  0xffff and 0x0000 vintage values are skipped;
	(build_system_uid_map) a new function, which builds mapping from
	  the system uids to the local uids;
	(remove_from_system_uid_map) a new function to remove the local uid
	  from the mapping;
	(do_remove_user) the user is also removed from system uid mapping;
	(set_user_info) `city' and `country' fields are supported;
	  member's `occupation' field is updated, if changed: bug fixed;
	(do_list_users) `city' and `country' are reported;
	(cmd_get_uid_by_pid) a new function to handle ULS_GET_UID_BY_PID
	  requests from the `serve' process;
	(process_packet) ULS_GET_UID_BY_PID command is handled;
	(main) the mapping from the system uids to the local uids is built.

	* serve.c:
	(get_peer_local_user) a new function to request the connection
	  credentials from the userlist-server;
	(cmd_pass_descriptors) connection credentials are requested;
	(cmd_team_get_archive) connection credentials are requested and
	  checked;
	(cmd_team_list_runs) the same as above;
	(cmd_team_page) the same as above;
	(cmd_team_show_item) the same as above;
	(cmd_team_submit_run) the same as above;
	(cmd_team_submit_clar) the same as above;
	(check_sockets) function returns, if no file descriptors to wait on;
	(do_loop) check for exit condition is performed in the beginning
	  of the main loop;
	(main) old the teamdb files authentification-related code is
	  removed.

	* teamdb.c:
	all the old files-related authentification stuff is removed;
	userlist-server disconnection is now handled properly;
	<signal.h> is included;
	(handler) new function: a temporary handler for user termination
	  signal, installed for the time of reestablishing server connection;
	(restore_connection) a new function to restore the lost connection
	  to the server;
	(lock_userlist_table) server disconnect is handled properly;
	(unlock_userlist_table) semop errors are reported, but otherwise
	  ignored;
	(teamdb_refresh) termination of `lock_userlist_table' due to
	  impossibility to restore connection to server is handled;
	(verify_passwd) removed;
	(read_fields) removed;
	(parse_teamdb_flags) removed;
	(parse_passwd_flags) removed;
	(unparse_passwd_flags) removed;
	(teamdb_open) removed;
	(teamdb_open_client) socket_path is saved for possible reconnection;
	  obsoleted files authentification stuff is removed;
	(teamdb_lookup_client) `cached_map == NULL' size is handled;
	(teamdb_lookup) obsoleted stuff is removed;
	(teamdb_lookup_login) obsoleted stuff is removed;
	(teamdb_get_login) obsoleted stuff is removed;
	(teamdb_get_name) the same;
	(teamdb_scramble_passwd) always reports "Not supported" error;
	(teamdb_check_scrambled_passwd) the same;
	(teamdb_check_passwd) the same;
	(teamdb_set_scrambled_passwd) the same;
	(teamdb_get_plain_password) the same;
	(teamdb_get_flags) BANNED flag may be also returned;
	(teamdb_write_passwd) always reports "Not supported" error;
	(teamdb_write_teamdb) the same;
	(teamdb_get_max_team_id) obsoleted stuff is removed;
	(teamdb_get_total_teams) the same;
	(teamdb_is_valid_login) always reports "Not supported" error;
	(teamdb_is_valid_name) the same;
	(teamdb_change_login) the same;
	(teamdb_change_name) the same;
	(teamdb_toggle_vis) the same;
	(teamdb_toggle_ban) the same;
	(teamdb_add_team) the same;
	(teamdb_transaction) the same;
	(teamdb_commit) the same;
	(teamdb_rollback) the same;
	(save_undo) removed;
	(teamdb_export_team) obsoleted stuff is removed;
	(teamdb_regenerate_passwords) server disconnect is handled;
	(syncronize_team_extra) return immediately, if not connected to server;
	(teamdb_get_archive_time) `server_conn' is asserted;
	(teamdb_set_archive_time) `server_conn' is asserted;
	(teamdb_get_uid_by_pid) a new function to request the local process
	  credentials by is pid.

	* teamdb.h: 
	(teamdb_get_uid_by_pid) prototype added.

	* run.c: <termios.h> is included;
	(generate_team_report) the process exit code is not reported to
	  the user unless global parameter `report_error_code' is set;
	(run_tests) terminal state is saved before starting the program
	  being judged and restored afterwards.

	* register.c:
	new global variables `user_city', `user_country' to store the
	  corresponding fields;
	(field_desc) description of "City", "Country" fields added;
	(read_user_info_from_server) `user_country', `user_city' are read;
	(edit_registration_data) the generated HTML is slightly changed.

	* html.c:
	(do_write_kirov_standings) fully solved problems are printed in bold;
	  an extra column with the total number of fully solved problems
	  is printed for each user.

	* expat_iface.c:
	<reuse/logger.h>, <reuse/xalloc.h> are included this way.

	* edit-userlist.c:
	(print_help) a new function to print a short help in the bottom line;
	(vis_err) help is displayed;
	(okcancel) help is displayed;
	(yesno) help is displayed;
	(display_reg_status_menu) help is displayed;
	(display_role_menu) help is displayed;
	(display_member_status_menu) help is displayed;
	(edit_string) help is displayed;
	(display_user) help is displayed;
	  new fields `city', `country' are supported;
	(display_registered_users) the help is displayed via `print_help';
	(display_contests_menu) help is displayed;
	(display_user_menu) help is displayed;
	(display_main_menu) help is displayed.

	* userlist_xml.c:
	(tag_map) element tags `city', `country' are supported;
	(tag_sizes) the same as above;
	(node_free) `city', `country' fields are freed;
	(do_parse_user) `city', `country' elements are parsed;
	(unparse_user) `city', `country' elements are unparsed.

	* userlist_clnt.h: 
	(userlist_clnt_get_uid_by_pid) new prototype added.

	* userlist.h: new tags: USERLIST_T_CITY, USERLIST_T_COUNTRY;
	new field ids: USERLIST_NN_CITY, USERLIST_NN_COUNTRY;
	(struct userlist_user) fields `city', `country' are added.

	* userlist.c:
	(userlist_get_user_field_str) new fields `city' and `country'
	  are supported;
	(userlist_set_user_field_str) the same as above;
	(userlist_delete_user_field) the same as above.

	* team.c: 
	(main) minor change in the generated HTML text.

	* runlog.c:
	(read_runlog) when runlog is empty the file version in the header
	  is set to 1.

	* protocol.h: new server error SRV_ERR_NO_PERMS.

	* protocol.c: new error message: "permission denied".

	* prepare.h, prepare.c:
	new global parameter `report_error_code' is supported.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* contests.h: new constants CONTEST_F_CITY, CONTEST_F_COUNTRY added.

	* contests.c:
	(field_map) new userlist user fields `city' and `country' are
	  handled.

	* .cvsignore: *** empty log message ***

2002-12-06  Alexander Chernov  <cher@ispras.ru>

	* userlist_clnt.c:
	Removed. All the functions are moved to individual files
	in userlist_clnt directory.

	* userlist_clnt.h: <string.h> is included;
	(userlist_clnt_send_packet) new function prototype. It was
	  previously a static function;
	(userlist_clnt_recv_packet) new function prototype. The same as
	  above;
	(userlist_clnt_do_pass_fd) new function prototype. The same.

	* userlist_proto.h: new request ULS_GET_UID_BY_PID;
	new reply ULS_UID;
	new error code ULS_ERR_DISCONNECT;
	new request structure userlist_pk_get_uid_by_pid;
	new reply structure userlist_pk_uid.

	* userlist_proto.c: new error code verbose message.

2002-12-03  Alexander Chernov  <cher@ispras.ru>

	* .cvsignore, .cvsignore: *** empty log message ***

	* serve.c: 
	(read_run_packet) a minor spelling error is fixed;
	  in `KIROV' score system only RUN_OK, RUN_PARTIAL and
	  RUN_CHECK_FAILED testing results are allowed.

	* run.c:
	(run_tests) in KIROV judging mode when even one test is failed
	  with RUN_CHECK_FAILED, the whole test run is marked as
	  RUN_CHECK_FAILED.

	* makefile:
	added rule `subdirs_all' to recurse to subdirectories and do
	  `make all';
	rule `clean' recurses to subdirectories;
	rules to compile `cdeps' are added;
	all the dependencies are removed from the makefile. They are generated
	  on the fly using `cdeps' utility.

2002-12-02  Alexander Chernov  <cher@ispras.ru>

	* VERSION: *** empty log message ***

	* serve.c: MAJOR CHANGES:
	  team<->serve protocol is changed:
	  o a single UNIX socket is used instead of spool directory;
	  o requests and responses are passed in binary form;
	  o team credentials are passed upon connection (normally, they are
	    credentials of the web server);
	  o to handle reguests, where large amount of html is generated,
	    remote client socket file descriptors are passed via UNIX
	    socket, so the server writes directly to the remote client;
	DETAILED DESCRIPTION:
	"userlist.h", "sha.h" files are included;
	lots of system includes related to the sockets and select are
	  included;
	(struct client_state) a new structure to store the state of the
	  client;
	(client_new_state) a new function to contstruct new client structure;
	(client_disconnect) a new function to destroy client structure;
	(struct remove_queue_item) a new structure to store the list
	  of items pending to removal;
	(remove_queue_add) a new function to add an item to the remove queue;
	(interrupt_signal) a new function - handler for SIGTERM, SIGINT;
	global variable `current_time' is used instead of local `time()' calls
	  in all the functions;
	(update_standings_file) declared `static';
	(update_public_log_file) declared `static';
	(update_status_file) declared `static';
	  `download_interval' field is written;
	(check_team_quota) declared `static';
	  `size_t' type is used;
	(check_clar_qouta) declared `static';
	(report_to_client) declared `static';
	(report_error) declared `static';
	  team_data_dir parameter is now removed;
	(report_bad_packet) declared `static';
	(is_valid_status) declared `static';
	  `RUN_IGNORED' is valid;
	(check_period) declared `static';
	(team_view_clar) function is removed;
	(new_enqueue_reply) a new function to add the packet to send slot
	  for the client;
	(team_send_clar) function is removed;
	(new_send_reply) a new function to send to the client a message
	  without any additional data;
	(new_bad_packet) a new function to report bad packet error and
	  close the connection;
	(cmd_pass_descriptors) a new function to handle SRV_CMD_PASS_FD
	  request;
	(cmd_team_get_archive) a new function to handle SRV_CMD_GET_ARCHIVE
	  request;
	(team_submit) function is removed;
	(cmd_team_list_runs) a new function to handle SRV_CMD_LIST_RUNS;
	(cmd_team_page) a new function to handle SRV_CMD_TEAM_PAGE;
	(team_change_passwd) removed;
	(cmd_team_show_item) a new function to handle SRV_CMD_SHOW_SOURCE,
	  SRV_CMD_SHOW_CLAR and SRV_CMD_SHOW_REPORT requests;
	(team_stat) removed;
	(cmd_team_submit_run) a new function to handle SRV_CMD_SUBMIT_RUN;
	(team_view_report) removed;
	(team_view_source) removed;
	(cmd_team_submit_clar) a new function to handle SRV_CMD_SUBMIT_CLAR;
	(read_team_packet) removed;
	(read_compile_packet) declared `static';
	(read_run_packet) declared `static';
	(process_judge_reply) declared `static';
	(rejudge_run) declared `static';
	  `run_get_record' call is updated;
	(judge_stat) declared `static';
	(judge_standings) declared `static';
	(judge_update_public_standings) declared `static';
	(judge_view_clar) declared `static';
	(judge_view_report) declared `static';
	(judge_view_src) declared `static';
	(judge_start) declared `static';
	(judge_stop) declared `static';
	(judge_sched) declared `static';
	(judge_time) declared `static';
	(judge_change_status) declared `static';
	  `RUN_IGNORED' run status is handled;
	(judge_reply) declared `static';
	(judge_view_teams) declared `static';
	(judge_view_one_team) declared `static';
	(judge_change_team_login) declared `static';
	(judge_change_team_name) declared `static';
	(judge_change_team_password) declared `static';
	(judge_change_team_vis) declared `static';
	(judge_change_team_ban) declared `static';
	(do_add_team) declared `static';
	(judge_add_team) declared `static';
	(judge_message) declared `static';
	(judge_rejudge_all) declared `static';
	  `RUN_IGNORED' runs are not rejudged;
	(judge_rejudge_problem) declared `static';
	  `RUN_IGNORED' runs are not rejudged;
	(judge_reset_contest) declared `static';
	(judge_suspend_clients) declared `static';
	(judge_resume_clients) declared `static';
	(judge_cmds) declared `static';
	(read_judge_packet) declared `static';
	(check_remove_queue) a new function to check the remove queue and
	  unlink pending items;
	(process_packet) a new function to handle packets from UNIX socket;
	(create_socket) a new function to create the socket and initialize
	  the related data structures;
	(check_sockets) a new function, which watch on the icoming file
	  descriptors;
	(may_safely_exit) a new function, which checks whether the server
	  may be exited. All the write buffers must be empty;
	(do_loop) declared `static';
	  signal handler for SIGINT, SIGTERM is installed;
	  SIGPIPE signal is ignored;
	  team spool directory is no longer checked and the corresponding
	  configuration parameters are removed;
	(main) socket file is unlinked when do_loop exits.

	* html.h: <stdio.h>, <time.h> are included;
	(write_team_clar) prototype is removed;
	(write_team_report_view) removed;
	(write_team_source_view) removed;
	(new_write_user_runs) prototype added;
	(new_write_user_clars) prototype added;
	(new_write_user_clar) prototype added;
	(new_write_user_source_view) prototype added;
	(new_write_user_report_view) prototype added;
	(write_team_page) prototype added.

	* html.c: "protocol.h" file is included;
	(write_clar_view) call of `duration_str' is updated due to changes
	  in its parameters;
	(new_write_user_runs) a new function (a part of former
	  `write_team_statistics'), which prints only run log for a user;
	(new_write_user_clars) a new function (a part of former
	  `write_team_statistics'), which prints only clar log for a user;
	(write_team_statistics) split into the two new functions (see above);
	(write_team_clar) removed;
	(new_write_user_clars) a new function (previously write_team_clar),
	  which prints detailed clarification request;
	(do_write_kirov_standings) standings_charset global parameter is
	  used;
	  `run_get_record' call is updated;
	  `duration_str' call is updated;
	(do_write_standings) the same changes as above;
	(write_standings) if `charset' and `standings_charset' does not
	  match, standings are recoded;
	(do_write_public_log) `time_t', `size_t' types are used;
	  `duration_str' call is updated;
	(write_public_log) `time_t', `size_t' types are used;
	  `run_get_record' call is updated;
	  `duration_str' call is updated;
	  printf format specifiers are changed for size_t-typed vars;
	  "Ignore" option is added;
	(write_judge_allclars) `duration_str' call is updated;
	(new_write_user_source_view) this is new name for
	  `write_team_source_view';
	  the user source is generated to the passed stream descriptor;
	  the possible error code is returned from the function;
	(new_write_user_report_view) this is new name for
	  `write_team_report_view';
	  the report is written to the passed stream descriptor;
	  the function returns its error code;
	(write_team_page) a new function, which generates the team main page,
	  including run log, submit dialog, clar log, write new clar dialog.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* team.c: ARCHITECTURE CHANGED:
	  `userlist-server' daemon is used for authentification. The old files
	  method (teamdb, passwd) is no longer supported;
	  team->serve protocol is completely changed. It uses a single UNIX
	  socket. It passes the data in binary format. In some cases the client
	  passes to the server the file descriptors, which may be user to
	  write the HTML code to the remote client directly.
	PARAMETERS CHANGED:
	  o `contest_name' parameter is removed, the contest name is taken
	    from the contests XML database,
	  o `conf_dir' parameter is removed: no longer used;
	  o `teamdb_file' parameter is removed: authentification is performed
	    with `userlist-server' daemon;
	  o `passwd_file' is removed: the same is above;
	  o `languages_file' parameter is removed, the main team page
	    is now generated on the server side, which has all the necessary
	    information;
	  o `problems_submit_file' is removed: the same as above;
	  o `problems_clar_file' is removed: the same as above;
	  o `pipe_dir' is removed: team<->serve interaction is performed
	     through UNIX socket, so no separate directory is necessary;
	  o `team_dir' is removed: the same as above;
	  o `team_cmd_dir' is removed: the same as above;
	  o `team_data_dir' is removed: the same as above;
	  o `serve_socket' new parameter to specify the name of the UNIX
	    socket to communicate with server. Default value `serve' works,
	    if not changed on server;
	"teamdb.h" is removed;
	"protocol.h", "serve_clnt.h" are included;
	<stdarg.h> is included;
	default parameter values of removed parameters are removed;
	(struct section_global_data) fields which corresponds to the
	  removed parameters are removed;
	  new field `serve_socket';
	(error) new function to append messages to the error log;
	(set_defaults) changed substantially;
	(initialize) changed substantially;
	(read_server_templates) no longer used;
	(check_passwd) old files-based method is no longer supported;
	(get_team_statistics) removed;
	(send_clar_if_asked) changed substantially;
	(submit_if_asked) changed substantially;
	(change_passwd_if_asked) changed substantially;
	(show_clar_if_asked) changed substantially;
	(request_source_if_asked) changed substantially;
	(request_report_if_asked) changed substantially;
	(request_archive_if_asked) new function to download the user's
	  submit archive (in tar.gz format);
	(display_team_page) new function to send `team page' request to the
	  server. The remove client socket file descriptor is passed in the
	  request;
	(main) changed substantially.

	* runlog.c:
	MAJOR CHANGE: the database is now stored in the binary format;
	(struct run_header) `time_t' type is used instead of `unsigned long';
	  `version' field is added to store the database file version,
	   version 0 is the text database file, version 1 is the current,
	  `pad' field is added to pad the structure size to 64 bytes;
	(struct run_entry) `time_t', `size_t' types are used where appropriate;
	  `ip' is stored in binary format (ie unsigned long) rather than in
	  textual format;
	  new field `sha1' to store the run hash value;
	  `locale_id', `test' are now `signed char's to save the memory;
	  `language', `status' are now `unsigned char's;
	(run_read_entry) `sscanf' specification is updated since field
	  types are changed;
	  `ip' is parsed from textual to binary representation using
	  `run_parse_ip';
	(is_runlog_version_0) new function, which checks, whether the
	  run database file is in textual format (version 0 format);
	(read_runlog_version_0) new function, which reads the runlog
	  in textual format;
	(save_runlog_backup) new function, which saves the runlog file
	  under the name `runlog.bak';
	(do_write) a new function to write block to file, handing partial
	  writes;
	(do_read) a new function to read block from file, handing partial
	  reads;
	(write_full_runlog_current_version) a new function to write the
	  runlog in the current version format;
	(read_runlog) a new function to read the runlog in binary format;
	(run_open) function is rewritten. It handles different database
	  formats. If the database is in text format, the backup copy is
	  saved;
	(run_make_record) function removed;
	(run_make_header) function removed;
	(run_flush_entry) changed to binary format;
	(run_add_record) `time_t', `size_t' types are used;
	  `ip' is passed in binary format (i.e. `unsigned long') rather
	  than in textual format;
	  new parameter `sha1' to pass the run hash value;
	  `locale_id', `language' are checked to fit into byte;
	  record is zeroed before setting its fields;
	(run_flush_header) changed to binary format;
	(run_change_status) `newstatus', `newtest' are checked to fit into
	  a byte;
	(run_get_record) `time_t', `size_t' types are used;
	  `pip' now is pointer to its binary representation (`unsigned long')
	  rather than textual representation;
	  new parameter `psha1' to return the hash value;
	(run_start_contest) `time_t' type is used;
	(run_stop_contest) the same;
	(run_set_duration) the same;
	(run_sched_contest) the same;
	(run_get_start_time) the same;
	(run_get_stop_time) the same;
	(run_get_times) the same;
	(run_get_team_usage) `size_t' type is used;
	(run_get_attempts) runs with `RUN_IGNORED' status are ignored;
	(run_status_str) `RUN_IGNORED' status is handled;
	(run_get_fog_period) `time_t' type is used;
	(run_unparse_ip) new function to convert the IPv4 address from
	  binary to textual representation;
	(run_parse_ip) new function to convert the IPv4 address from
	  textual to binary representation;
	(run_check_duplicate) new function, which checks whether the
	  given run is a duplicate of some of the previous runs.

	* runlog.h: <time.h> is included;
	<string.h> is included;
	new status RUN_IGNORED added;
	(run_open) prototype changed to use `const' qualifier;
	(run_add_record) `time_t', `size_t' types are used instead of
	  unsigned long;
	  `ip' is passed as unsigned long rather than char;
	  new parameter `sha1' to pass the hash value;
	(run_start_contest,run_get_start_time) `time_t' type is used;
	(run_get_record)  `time_t', `size_t' types are used;
	  `ip' pointer is now `unsigned long *', not `unsigned char*';
	  new parameter to return the sha1 hash value;
	(run_get_times) `time_t' type is used;
	(run_set_duration) the same;
	(run_get_stop_time) the same;
	(run_stop_contest) the same;
	(run_sched_contest) the same;
	(run_get_total) the same;
	(run_get_fog_period) the same;
	(run_get_team_usage) `size_t' type is used;
	(run_unparse_ip) new function prototype;
	(run_parse_ip) new function prototype;
	(run_check_duplicate) new function prototype.

	* run.c:
	(run_tests) empty output file is created even if no_redirect flag
	  is set.

	* run.c: "cr_serialize.h" is included;
	(generate_team_report) `score_buf' variable is initialized on each
	  iteration;
	(run_tests) tester parameter `time_limit_adjustment' is handled. If
	  the parameter is > 0, its value is added to the problem's time limit;
	  if task start failed, it is counted as failed test;
	(do_loop) subprocess run serialization is used. `cr_serialize_init'
	  is called at the start of the function, when a run is to be
	  started `cr_serialize_lock' is called, when the run is completed,
	  `cr_serialize_unlock' is called.

	* register.c:
	(parse_cookies) handing of Internet Explorer (mis?)feature is added.
	  The Internet Explorer passes back all the cookies passed to it
	  in one session instead of the last cookie.

	* protocol.h:
	(struct prot_serve_status) field `download_interval' is added;
	(struct prot_serve_packet) new structure to describe the minimal
	  packet passed through team<->serve socket;
	SRV_CMD_* constants for team->serve requests are defined;
	SRV_RPL_* server replies for team->serve requests are defined;
	SRV_ERR_* error code constants are defined;
	number of prot_serve_pkt_* structure, which describe packets for
	  team->serve commands and serve->team replies are defined;
	(protocol_strerror) prototype added.

	* protocol.c: more error code descriptions are added.

	* prepare.h: "nls.h" is included;
	(struct section_global_data) new field `serve_socket';
	  new internal field `charset_ptr', which contains the reference to
	  the charset functions for the current charset;
	  new field `standings_charset';
	  new internal field `standings_charset_ptr';
	  fields `team_dir', `team_cmd_dir', `team_data_dir' are removed;
	  new field `team_download_time';
	  new field `cr_serialization_key';
	  new field `show_astr_time';
	  new field `ignore_duplicated_runs';
	(struct section_tester_data) new field `time_limit_adjustment'.

	* prepare.c:
	new global parameter `standings_charset' which contains the charset
	  in which static standings are generated;
	new global parameter `serve_socket' which contains the name of UNIX
	  socket for team<->serve communication;
	parameters `team_dir', `team_cmd_dir', `team_data_dir' are removed,
	  since the communication is performed via UNIX socket;
	new global parameter `team_download_time', which is set to the
	  inverval in minutes, after which the user may again download his
	  runs after its downloads. The parameter may be explicitly set to 0,
	  user downloads are then completely disabled;
	new global parameter `cr_serialization_key'. If this parameter is
	  non-zero, it contain the value of SYSV semaphore key, which is used
	  by `compile' and `run' utilities to serialize subprocess execution;
	new global parameter `show_astr_time'. If this parameter is non-zero,
	  the astronomic time of submission is printed instead of duration
	  from the contest start;
	new global parameter `ignore_duplicated_runs'. If this parameter is
	  non-zero, the runs are checked for duplicates. If the previous
	  run of the same user has the same language, problem, ip, size,
	  checksum values, the current run is marked `Ignored';
	new tester parameter `time_limit_adjustment'. If this parameter is
	  non-zero, the time-limit is increased by a given number of seconds;
	default charset is set to "koi8-r";
	(global_init_func) initialization of `team_download_time',
	  `ignore_duplicated_runs' is added;
	(inheritance_info) `time_limit_adjustment' is added;
	(set_defaults) all the new fields are initialized;
	(create_dirs) `team_dir', `team_cmd_dir', `team_data_dir' are not
	  created, since the parameters are removed.

	* nls.h:
	(struct nls_table) new field `is_singlebyte', which is set to 1, if
	  each character in the charset is represented with 1 byte;
	(struct nls_table) new field `unilen', which is reference to function,
	  that returns the length of the given unicode character in bytes
	  in this charset;
	all nls_table_* global variables are added as extern references;
	(str_utf8_to_enc) new function prototype;
	(str_utf8_to_enc_unchecked) new function prototype;
	(str_utf8_to_enc_heap) new function prototype;
	(str_utf8_to_koi8) new function prototype;
	(str_utf8_to_koi8_unchecked) new function prototype;
	(str_utf8_to_koi8_heap) new function prototype;
	(str_koi8_to_enc) new function prototype;
	(str_koi8_to_enc_unchecked) new function prototype;
	(str_koi8_to_enc_heap) new function prototype.

	* misctext.h: 
	(duration_str) prototype is updated.

	* misctext.c: <time.h> is included;
	(duration_str) new parameter `show_astr' is added. If this parameter
	  is non-zero, astronomic time of `cur' is displayed instead of
	  duraction `cur-start';
	  previous parameter `time' is decomposed into two: `cur' and `start',
	  `cur' is the time to convert to string, `start' is the contest start
	  time.

	* master.c:
	(change_status_if_asked) range of valid status constants is extended.

	* makefile: utf8_utils.[ch] module is removed;
	rules for compilation of `libcharsets.a' are added;
	rules for compilation of `libserve_clnt.a' are added;
	rule `clean' is updated to clean subdirectories;
	lists of c files for individual utilities are corrected.

	* files.make: cr_serialize.[ch] module added;
	all charset handling functions are moved to a separate directory
	  (charsets);
	utf8_utils.h is merged to nls.h;
	utf8_utils.c is decomposed into individual functions which are put
	  to `charsets' directory.

	* expat_iface.c: "utf8_utils.h" is no longer included.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* cr_serialize.c: 
	(cr_serialize_lock) debugging output is commented out;
	(cr_serialize_unlock) the same.

	* compile.c: "cr_serialize.h" is included;
	(do_loop) subprocess creation serialization is implemented using the
	  new `cr_serialize' module.

	* clntutil.h:
	`server_download_interval' variable is declared as extern.

	* clntutil.c:
	new server state variable `server_download_interval', which contains
	  the allowed interval (in seconds) between team submit downloads;
	(client_check_server_status) `server_download_interval' variable is
	  read;
	(client_print_server_status) calls of `duration_str' are updated as
	  the function parameters are changed.

2002-12-01  Alexander Chernov  <cher@ispras.ru>

	* serve_clnt.h: (serve_clnt_show_item) new function prototype;
	(serve_clnt_submit_run) new function prototype;
	(serve_clnt_submit_clar) new function prototype;
	(serve_clnt_team_page) new function prototype.

	* userlist-server.c:
	(cmd_admin_process) if there is an admin record for the given user
	  with the path "ANY", the path is not checked.

	* userlist_xml.c: "nls_utils.h" is no longer included;
	(userlist_unparse_ip) this is the new name for `unparse_ip',
	  function became externally visible;
	(unparse_cookies) use of `unparse_ip' is updated.

	* userlist.h: 
	(userlist_unparse_ip) prototype added.

	* .cvsignore: edit-userlist utility added

2002-11-30  Alexander Chernov  <cher@ispras.ru>

	* cr_serialize.h, cr_serialize.c: Initial revision

2002-11-24  Alexander Chernov  <cher@ispras.ru>

	* teamdb.c:
	(struct teamdb_extra) a new structure for each team, this structure
	  contains various temporary information about the team. Currently
	  it contains only the time of the last run archive downloading.
	(teamdb_refresh) team extra information is marked `out of sync';
	(teamdb_lookup_client) a new inline function to check the
	  validity of user_id in case of client-server operation mode;
	(syncronize_team_extra) a new function to syncronize list of
	  users with the current extra information;
	(teamdb_get_archive_time) a new function, which returns the time
	  of the last run archive download for a given team;
	(teamdb_set_archive_time) a new function, which sets the time of the
	  last run archive download for a given team.

	* teamdb.h: <time.h> is included;
	(teamdb_get_archive_time) new prototype;
	(teamdb_set_archive_time) new prototype.

	* serve_clnt.h: Initial revision

2002-11-23  Alexander Chernov  <cher@ispras.ru>

	* protocol.c: Initial revision

2002-11-18  Alexander Chernov  <cher@ispras.ru>

	* run.c:
	(do_loop) the executable file to be tested is removed from the
	  server_exe_dir directory.

	* compile.c:
	(do_loop) source file is removed from server_src_dir when the
	  incomping compile packet is being processed.

	* users.c: "fileutl.h" is included;
	(read_user_id) a new function to parse "user_id" CGI param;
	(put_http_header) a new function to print HTTP header only;
	(main) if CGI parameter "secret_mode" is set, ";"-separated
	  table is to be requested from server;
	  header and footer files are supported;
	  user_id and request_flags are passed to the server;

	* userlist_xml.c: "read_only" attribute is supported;
	(parse_contest) "banned", "invisible", "read_only" attributes are
	  parsed;
	(userlist_parse_str) a new function, which parses the userlist XML
	  from string;
	(userlist_unparse_reg_status) a new function;
	(unparse_contest) a new function to generate XML for a registration
	  entry;
	(unparse_contests) now uses `unparse_contest';
	(unparse_user_short) generates XML with a short user description;
	(unparse_user) "invisible", "banned" attributes are generated only
	  when in USERLIST_MODE_ALL mode;
	  "read_only" attribute is unparsed;
	(userlist_unparse_short) a new function to generate a short XML
	  with user list.

	* userlist_proto.h:
	new request codes: ULS_LIST_ALL_USERS, ULS_EDIT_REGISTRATION,
	  ULS_EDIT_FIELD, ULS_DELETE_FIELD, ULS_ADD_FIELD;
	new error codes: ULS_ERR_NOT_REGISTERED, ULS_ERR_CANNOT_DELETE,
	  ULS_ERR_CANNOT_CHANGE, ULS_ERR_DEADLINE;
	(struct userlist_pk_edit_registration) new packet structure;
	(struct userlist_pk_edit_field) new packet structure.

	* userlist_proto.c: new explanation for new error codes added.

	* userlist_clnt.h: (userlist_clnt_list_all_users) new prototype;
	(userlist_clnt_change_registration) new prototype;
	(userlist_clnt_edit_field) new prototype;
	(userlist_clnt_delete_field) new prototype;
	(userlist_clnt_add_field) new prototype.

	* userlist_clnt.c:
	(userlist_clnt_get_info) error codes from `send_packet' and
	  `receive_packet' are preserved and returned to sender;
	(userlist_clnt_list_all_users) a new function to list all users in
	  the database, or to list all users registered for a particular
	  contest. The result is returned in XML;
	(userlist_clnt_change_registration)  a new function to change
	  registration status of a particular user to a particular contest;
	(userlist_clnt_edit_field) a new function to change the value
	  of the given field;
	(userlist_clnt_delete_field) a new function to reset the value
	  of the given field;
	(userlist_clnt_add_field) a new function to add a new user or
	  a new member into user.

	* userlist.h: new registration status constant USERLIST_REG_LAST;
	new attribute code USERLIST_A_READ_ONLY;
	new USERLIST_NN_* constants for userlist_user field codes;
	new USERLIST_NM_* constants for userlist_member field codes;
	new registration flag constant USERLIST_UC_ALL;
	(struct userlist_user) `read_only' field added;
	new userlist unparse flag USERLIST_MODE_SHORT;
	(userlist_parse_str) new function prototype;
	(userlist_unparse_short) new function prototype;
	(userlist_unparse_reg_status) new function prototype;
	(userlist_member_status_str) new function prototype;
	(userlist_parse_date) new function prototype;
	(userlist_parse_bool) new function prototype;
	(userlist_unparse_bool) new prototype;
	(userlist_unparse_date) new prototype;
	(userlist_get_member_field_str) new prototype;
	(userlist_set_member_field_str) new prototype;
	(userlist_delete_member_field) new prototype;
	(userlist_get_user_field_str) new prototype;
	(userlist_set_member_field_str) new prototype;
	(userlist_delete_user_field) new prototype.

	* userlist.c:
	(userlist_member_status_str) a new function to return string
	  representation of member status;
	(userlist_parse_date) a new function to parse the date in the
	  format 'YYYY/MM/DD HH:MM:SS' to the internal time_t format;
	(userlist_unparse_bool) a new function;
	(userlist_unparse_date) a new function to convert the date
	  in the internal time_t format into the external format;
	(userlist_parse_bool) a new function;
	(userlist_get_member_field_str) a new function, which returns
	  the field's value of userlist_member structure by field code;
	(userlist_delete_member_field) a new function, which resets
	  the field value of userlist_member structure by field code;
	(userlist_set_member_field_str) a new function, which sets the
	  userlist_member field value by field code;
	(userlist_get_user_field_str) a new function, which returns
	  the userlist_user field value by its field code;
	(userlist_set_user_field_str) a new function, which sets
	  the userlist_user field value by its field code;
	(userlist_delete_user_field) a new function, which clears
	  the userlist_user field value by its field code.

	* userlist-server.c:
	constant->string tables for members (singular and plural) and
	member status are added;
	FIRST_COOKIE, NEXT_COOKIE, FIRST_CONTEST, NEXT_CONTEST macros added;
	(passwd_check) if the first password check failed, try it the second
	  time, now ignoring all spaces in the provided password;
	(allocate_new_user) a new function to allocate a new user structure,
	  link it into the tree and add it into the reference table;
	(create_newuser) locale_id is generated after the contest_id in
	  the URL in the e-mail message (because some mail clients add
	  the trailing dot from the message to the URL);
	  `allocate_new_user' function is used;
	(do_remove_user) a function to remove a user from the database,
	  notifying all the contests, in which the user has active
	  registrations;
	(check_all_users) `do_remove_user' is used;
	(get_user_info) contest administrator may get all the information
	  about the user, including the information, which is not send to
	  the user himself;
	(cmd_list_all_users) a new function to generate XML with brief
	  information about the users either all, or registered for a
	  particular contest. This function handles ULS_LIST_ALL_USERS
	  request;
	(set_user_info) some `info' messages replaced to `err';
	  new user XML tree is always freed - memory leak is fixed;
	(register_for_contest) some `info' messages replaced with `err';
	  administrator may register any user to any contest;
	(do_list_users) if passed flag is set to 1, all the user table
	  is exported in ';'-separated plain format (for import to Excel);
	  detailed information for a given user is generated, if
	  requested;
	  references to detailed user information is generated in the
	  general user list information;
	(list_users) user_id and contest_id fields of the incoming packet
	  are verified;
	(cmd_edit_registration) a new function to change registration status.
	  Handles ULS_EDIT_REGISTRATION request;
	(cmd_delete_field) a new function, which resets or removes the
	  given field. Handles ULS_DELETE_FIELD request;
	(cmd_edit_field) a new function, which changes the value of the
	  given field. Handles ULS_EDIT_FIELD request;
	(cmd_add_field) a new function, which adds a new user or new
	  member. Handles ULS_ADD_FIELD request;
	(process_packet) ULS_LIST_ALL_USERS, ULS_EDIT_REGISTRATION,
	  ULS_EDIT_FIELD, ULS_DELETE_FIELD, ULS_ADD_FIELD requests are
	  handled;
	(do_backup) backup file is created with mode 0600;
	(flush_database) the database file is created with mode 0600;

2002-11-17  Alexander Chernov  <cher@ispras.ru>

	* teamdb.c:
	(teamdb_export_team) all information, except passwords, is exported
	  correctly even in client mode.

	* serve.c:
	(update_standings_file) standings header and footer are passed
	  to `write_standings';
	  the second standings are generated, if requested;
	(update_public_log_file) a new function, which periodically updates
	  public log file, if such file is requested by the serve's
	  configuration;
	(do_loop) `update_public_log_file' is called on each iteration.

	* register.c:
	FIRST_COOKIE, NEXT_COOKIE, FIRST_CONTEST, NEXT_CONTEST macros are
	  added;
	(check_contest_eligibility) registration deadline is checked;
	(register_for_contest_page) "Submit solution" column header is
	  generated only if there is atleast one such button in all
	  registered contests;
	  the current locale is preserved when following "Submit solution"
	  button;
	  locale_id is not put into invisible variables since it is passed
	  directly with URL;
	(read_user_info_from_form) `user_registering' variable is also
	  read;
	(read_user_info_from_server) `user_read_only' flag is handled;
	  user_registering flag is set to 1, if the user is not yet
	  registered to the given contest;
	(edit_registration_data) if the given user is not eligible to this
	  contest, `user_registering' flag is reset to 0;
	  the form comment is changed, if in read_only mode;
	  all input forms are generated disabled, if in read_only mode;
	  the main buttons (register for the contest, save the data,
	  back) are reimplemented to be simplier to understand;
	(main) the current time is read.

	* prepare.c, prepare.h:
	new global parameters: `standings_file_name', `stand_header_file',
	  `stand_footer_file', `stand2_file_name', `stand2_header_file',
	  `stand2_footer_file', `plog_file_name', `plog_header_file',
	  `plog_footer_file', `plog_update_time'.

	* html.h: (write_standings) two new parameters are added;
	(write_public_log) a new prototype added.

	* html.c:
	(do_write_kirov_standings) two parameters are added. These parameters
	  are for text to be printed before and after the actual standings;
	(do_write_standings) the same as above;
	(write_standings) the same as above;
	(do_write_public_log) a new function to generate a public contest
	  log;
	(write_public_log) an exported function to the above function.

	* edit-userlist.c:
	russian letters are handled correctly when pressed in various menus;
	(display_role_menu) a new function to display a menu to choose
	  between `Student', `School student', etc;
	(display_user) adding a new team member now works;
	  adding a contest registration now works;
	(display_registered_users) adding a contest registration works;
	(display_user_menu) adding a new user works.

	* clntutil.h: 
	(client_put_copyright) a new function prototype.

	* clntutil.c:
	(client_put_copyright) a new function to print only the copyright
	  notice;
	(client_put_footer) now uses `client_put_copyright'.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2002-11-14  Alexander Chernov  <cher@ispras.ru>

	* run.c: several standard system include files are added;
	(run_tests) the program output file is created explicitly,
	  because in no-privs mode program is not allowed to create
	  new files.

	* contests.h: new tag CONTEST_REGISTRATION_DEADLINE;
	(struct contest_desc) new field `reg_deadline'.

	* contests.c: "registration_deadline" element is parsed;
	(parse_date) new function to parse dates;
	(parse_contest) "registration_deadline" element is parsed.

	* files.make: `edit_userlist.c' is added.

	* makefile: rule for compilation of `edit-userlist' added;
	several file lists are fixed (.o files were used instead of .c).

	* ejudge.ru_RU.KOI8-R.po: some new translations added

	* edit-userlist.c: completed

2002-11-10  Alexander Chernov  <cher@ispras.ru>

	* userlist_proto.h:
	(struct userlist_pk_login_ok) new `contest_id' field.

	* userlist_clnt.h:
	(userlist_clnt_team_cookie) new parameter `p_contest_id'.

	* userlist_clnt.c:
	(userlist_clnt_lookup_cookie) contest_id is copied from the reply
	  packet to the user's location;
	(userlist_clnt_team_cookie) new parameter `p_contest_id';
	  contest_id is copied from the reply packet to the user's location.

	* userlist-server.c:
	(create_newuser) login url and ejudge email are taken from the contest
	  settings, if the contest is specified;
	(login_user) contest_id of the reply packed is copied from contest_id
	  of the request packet;
	(login_team_user) the same as above;
	(login_cookie) if the contest_id of the request packet is set, it is
	  copied to the cookie structure;
	  contest_id of the reply packet is taken from the cookie structure;
	(login_team_cookie) the same as above.

	* team.c:
	(display_enter_password) the current language is set correctly
	  depending on the value of `locale_id' parameter.

	* register.c: initial number of members for user is handled;
	(register_for_contest_page) a button to proceed to team submit
	  solution page is added, if the registration status is OK;
	(prepare_var_table) initial number of members is initialized;
	(read_user_info_from_form) maximal grade is checked carefully;
	(read_user_info_from_server) initial number of members is handled;
	(edit_registration_data) "General user information" message is
	  translated;
	  a comment is printed for "User Name" field;
	(register_new_user_page) User Login field is marked mandatory;
	  Reset button is removed.

	* makefile: installed binaries are not stripped.

	* contests.h:
	new elements are supported: `register_email', `register_url',
	  `team_url';
	new attributes are supported: `initial'.

	* contests.c:
	new elements are parsed: `register_email', `register_url',
	  `team_url';
	new attributes are parsed: `initial';
	(parse_member) `initial' attribute is parsed;
	(parse_contest) new elements parsed.

	* ejudge.ru_RU.KOI8-R.po: new messages translated

	* edit-userlist.c: Initial revision

2002-11-09  Alexander Chernov  <cher@ispras.ru>

	* users.c: new static variable `self_url';
	(set_locale_by_id) a new function;
	(initialize) self-reference URL is constructed and stored in
	  `self_url';
	(main) the needed locale is set with `set_locale_by_id' call;
	  new parameters passed to `userlist_clnt_list_users'.

	* userlist_xml.c:
	(parse_passwd) all password encoding methods are now supported.

	* userlist_proto.h: new requests: ULS_MAP_CONTEST, ULS_ADMIN_PROCESS,
	  ULS_GENERATE_TEAM_PASSWORDS, ULS_TEAM_LOGIN, ULS_TEAM_CHECK_COOKIE,
	  ULS_GET_CONTEST_NAME, ULS_TEAM_SET_PASSWD;
	new reply: ULS_CONTEST_MAPPED;
	new error codes: ULS_ERR_IPC_FAILURE, ULS_ERR_IP_NOT_ALLOWED,
	  ULS_ERR_CANNOT_PARTICIPATE;
	new enumeration for user invisible and banned status;
	(struct userlist_user_short) a user information to share with `serve';
	(struct userlist_table) a user information structure to share with
	  `serve';
	(struct userlist_pk_list_users) new fields added;
	(struct userlist_pk_map_contest) new request structure;
	(struct userlist_pk_contest_mapped) new reply structure.

	* userlist_proto.c: new error message texts added.

	* userlist_clnt.h: 
	(userlist_clnt_team_login) a new prototype;
	(userlist_clnt_team_cookie) a new prototype;
	(userlist_clnt_team_set_passwd) a new prototype;
	(userlist_clnt_list_users) new parameters added;
	(userlist_clnt_admin_process) a new prototype;
	(userlist_clnt_map_contest) a new prototype;
	(userlist_clnt_generate_team_passwd) a new prototype.

	* userlist_clnt.c: 
	(userlist_clnt_team_login) a new function;
	(userlist_clnt_team_cookie) a new function;
	(userlist_clnt_set_passwd) a new function;
	(userlist_clnt_map_contest) a new function;
	(userlist_clnt_list_users) more parameters added;
	(userlist_clnt_admin_process) a new function;
	(userlist_clnt_generate_team_passwd) a new function.

	* userlist_cfg.h: (struct userlist_cfg_admin_proc) new structure;
	(struct userlist_cfg) new field `admin_processes'.

	* userlist_cfg.c: <pwd.h> is included;
	new tags <admin_processes>, <admin_process> are supported;
	new attributes "user", "path";
	(err_dupl_elem) new function;
	(err_text_not_allowed) new function;
	(err_attr_not_allowed) new function;
	(err_empty_elem) new function;
	(err_nested_not_allowed) new function;
	(err_invalid_elem) new function;
	(err_invalid_attn) new function;
	(handle_final_tag) rewritten with use of the new functions;
	(parse_processes) new function;
	(userlist_cfg_parse) <processes> element is handled.

	* userlist.h:
	enum for invisible and banned user contest status is defined;
	(struct userlist_contest) new field `flags'.

2002-11-08  Alexander Chernov  <cher@ispras.ru>

	* userlist-server.c: IPC-related header files are included;
	"version.h", "sha.h", "misctext.h" are included;
	new static variable "program_name" to store the program name;
	new static variable `contest_extras' to store the extra info about
	  contests;
	support for contest users table sharing between server and client is
	  implemented;
	(attach_contest_extra) a new function;
	(detach_contest_extra) a new function;
	(lock_userlist_table) a new function;
	(unlock_userlist_table) a new function;
	(update_userlist_table) a new function;
	(disconnect_client) contest shared info is detached;
	(graceful_exit) now is a simple function, not a signal handler;
	  it also releases the IPC objects;
	(interrupt_signal) a new function: interrupt signal handler;
	(make_sha1_ascii) a new function;
	(passwd_convert_to_internal) a new function;
	(passwd_check) a new function;
	(login_user) internal representation of the password is used;
	  passwd_check is used instead of strcmp;
	(login_team_user) a new function;
	(login_team_cookie) a new function;
	(set_user_info) all the contests, which are OK for the user, regenerate
	  teamdb tables;
	(set_password) `info' are replaced with `err' in many places;
	  a user-provided password is stored in sha1 format;
	(team_set_password) a new function;
	(do_list_users) arguments are changed;
	  more checking added;
	(cmd_map_contest) a new function;
	(cmd_admin_process) a new function;
	(do_generate_team_passwd) a new function;
	(cmd_generate_team_passwd) a new function;
	(cmd_get_contest_name) a new function;
	(process_packet) many new valid packets are added;
	(do_work) signal disposition is slightly changed;
	  root clients are never detached.

	* teamdb.h: (teamdb_open_client) a new prototype;
	(teamdb_refresh) a new prototype;
	(teamdb_regenerate_passwords) a new prototype.

	* teamdb.c: support for userlist-server mode is implemented;
	"userlist_clnt.h", "userlist_proto.h" are included;
	a number of system headers is included;
	several static variables to hold userlist-server related info;
	(lock_userlist_table) a new function;
	(unlock_userlist_table) a new function;
	(teamdb_refresh) a new function;
	(teamdb_open_client) a new function;
	(teamdb_regenerate_passwords) a new function;
	all the other function are modified to support the new client mode.

	* team.c:
	"contests.h", "userlist_proto.h", "userlist_clnt.h" included;
	new global parameters: contest_id, socket_path, contests_path;
	(fix_string) function to check a string for valid chars;
	(set_defaults) if `contest_id' is set, the program works in the
	  new mode, which includes userlist-server;
	(parse_client_ip) a new function;
	(initialize) if `contest_id' is set, the contests database is parsed;
	(check_passwd) new userlist-server mode is supported;
	(change_passwd_if_asked) new userlist-server mode is supported;
	(main) contest IP limitations are checked;
	  new userlist-server mode is supported.

	* serve.c:
	(judge_generate_passwords) a new function, which generates random
	  team passwords for the current contest;
	GENPASSWD command is handled;
	(do_loop) team database is refreshed from the server on each
	  server cycle;
	(main) if `contest_id' is set, team database is opened in client mode.

	* register.c: new static variable `self_url';
	(initialize) self referenced url is constructed;
	(logout_page) messages are changed to use `self_url';
	(registration_is_complete) `self_url' is used;
	(main) all the environment is printed (in debug mode).

	* prepare.h: "contests.h" is included;
	new global parameters: `contest_id', `socket_path', `contests_path';
	new global variables: `contests', `cur_contest'.

	* prepare.c:
	new global variables: `contests' - the list of all contests;
	  `cur_contest' the current contest;
	global parameters contest_id, socket_path, contests_path handled;
	(set_defaults) if global.contest_id is set (which means new client
	  mode, socket_path and contests_path must be set);
	  if global.contest_id == 0, old compatibility mode is supported.

	* master.c: "misctext.h" is included;
	(print_regenerate_button) a new function to print
	  "Regenerate user password" button;
	(confirm_regenerate_if_asked) a new function to print confirmation
	  dialog;
	(do_generate_passwords_if_asked) a new function;
	(main) support for user passwords regeneration is added.

	* makefile: default installation path changed;
	lists of .c files necessary for compile, serve, submit, clar, run,
	  mkpasswd, team, send-passwords, userlist-server are changed;
	no longer compiled: submit, clar, mkpasswd, make-teamdb,
	  make-teamdb-inet, send-passwords;
	require expat: compile, run, serve, submit, clar, team.

	* ejudge.ru_RU.KOI8-R.po: new messages added.

2002-11-06  Alexander Chernov  <cher@ispras.ru>

	* users.c: (main) the messages are slightly changed.

	* userlist_xml.c: element tag <team_password> is added;
	(userlist_node_alloc) `tag' field of the created node is filled;
	(node_free) freeing of `passwd' removed;
	(parse_passwd) changed to support the new XML tree;
	(do_parse_user) new element tag <team_password> is handled,
	  handling of <password> is updated.

	* userlist_cfg.c: first attribute constant now has number 1.

	* userlist.h: new element <team_password> added;
	new structure `struct userlist_passwd';
	struct `userlist_user' now contains two passwords: register_passwd and
	  team_passwd, which are references to the subnodes.

	* userlist-server.c:
	team participation status strings are now localized;
	(create_newuser) user password XML tree generation changed;
	  e-mail is sent to the user in the requested language;
	(login_user) password checking is updated due to changes in the
	  XML tree structure;
	(set_password) updated due to changes in the XML tree structure;
	(do_list_users) the list of the users is generated in the requested
	  language.

	* register.c:
	"Pending" status is printed in magenta instead of yellow;
	(change_password) invalid closing tag is fixed.

	* makefile: rule `install' added.

	* files.make: users.c file added

	* ejudge.ru_RU.KOI8-R.po: some translations are fixed

2002-11-05  Alexander Chernov  <cher@ispras.ru>

	* userlist_proto.h: ULS_LIST_USERS command is added;
	`struct userlist_pk_list_users' is added.

	* userlist_clnt.h: 
	(userlist_list_users) prototype added.

	* userlist_clnt.c:
	(userlist_list_users) a new function to request the list of users,
	  registered for a particular contest.

	* userlist-server.c:
	(create_newuser) incoming packed is strictly validated for size match;
	  some logging is added;
	  user_map is extended when full;
	(create_cookie) debugging fprintf is removed;
	(do_list_users) a new function to print the list of users, registered
	  for a particular contest;
	(list_users) a new function to handle ULS_LIST_USERS request;
	(process_packet) ULS_LIST_USERS request is handled.

	* makefile: new utility `users' is added;
	`submit' dependency rule is fixed.

	* contests.h: Element tags <header_file>, <footer_file> are added.

	* contests.c:
	Two new element tags: header_file, footer_file are added;
	(handle_final_tag) copied here from userlist_cfg.c;
	(parse_contest) <name> tag is parsed with handle_final_tag;
	  <header_file>, <footer_file> tags are parsed.

	* users.c: Initial revision

	* .cvsignore: *** empty log message ***

2002-11-04  Alexander Chernov  <cher@ispras.ru>

	* userlist_xml.c, userlist_proto.h, userlist_clnt.h, userlist_clnt.c:
	an initial version is completed.

	* userlist_cfg.h: *** empty log message ***

	* userlist_cfg.c, userlist.h, userlist.c:
	an initial version is completed.

	* makefile: `register' file list corrected;
	`userlist-server' file list corrected;
	`register.o' dependencies corrected;
	`userlist-server.o' dependencies corrected;
	`expat_iface.o' dependencies corrected.

	* contests.h, contests.c, userlist-server.c, register.c:
	an initial version is completed.

	* expat_iface.c:
	(xml_unlink_node) a new function to remove an xml_tree node from the
	  tree;
	(xml_link_node_first) a new function to add a new xml_tree node to
	  the front of the other node's children list;
	(xml_link_node_last) a new function to add a new xml_tree node to
	  the back of the other node's children list.

	* expat_iface.h: 
	(xml_unlink_node) new function prototype;
	(xml_link_node_first) new function prototype;
	(xml_link_node_last) new function prototype.

	* files.make: userlist_proto.c is added.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* userlist_proto.c: Initial revision

2002-10-28  Alexander Chernov  <cher@ispras.ru>

	* userlist_clnt.c: in progress...

	* userlist_xml.c: completely rewritten.

	* userlist_proto.h: packet formats are reworked considerably.

	* userlist_clnt.h:
	(userlist_clnt_get_email) a new function prototype.

	* userlist_cfg.c:
	(userlist_cfg_parse) a newly created tree is returned instead of
	  quitting the whole program.

	* userlist.h: completely rewritten.

	* userlist.c: removed all the old stuff (so the file is empty now ;-)

	* userlist-server.c: (generate_random_cookie) a new function;
	(generate_random_password) a new function;
	merged in Victor Matyukhin's stuff;

	* register.c: in progress...

	* makefile: base64.c is added to the list of `userlist-server' files;
	dependencies are regenerated.

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

2002-10-26  Alexander Chernov  <cher@ispras.ru>

	* contests.c, contests.h, register.c, userlist_clnt.c, userlist_proto.h:
	in progress...

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* cgi.c:
	(do_cgi_read) A case, when the first parameter is specified without
	  value is handled correctly (for example, in URL xxx?yyy).

2002-10-25  Alexander Chernov  <cher@ispras.ru>

	* contests.c, contests.h, register.c: in progress...

2002-10-24  Alexander Chernov  <cher@ispras.ru>

	* register.c, userlist_clnt.c, userlist_clnt.h, userlist_proto.h:
	in progress...

2002-10-23  Alexander Chernov  <cher@ispras.ru>

	* contests.c, contests.h: in progress...

	* ejudge.ru_RU.KOI8-R.po: *** empty log message ***

	* makefile: userlist_clnt.c is added to the list of `register' files.

	* register.c, userlist_clnt.c: in progress...

	* userlist_proto.h: Initial revision

2002-10-22  Alexander Chernov  <cher@ispras.ru>

	* register.c: "contests.h" is included;
	(initialize) `contests.xml' file is parsed.

	* makefile: contests.c is added to the list of `register' files.

	* contests.h, contests.c: in progress...

2002-10-21  Alexander Chernov  <cher@ispras.ru>

	* files.make: contests.[ch] is added.

	* contests.h, contests.c: Initial revision

	* register.c: in progress...

2002-10-21  Alexander Chernov  <cher@ispras.ru>

	* userlist_cfg.h: "expat_iface.h" is included;
	(struct userlist_cfg) it is now a subtype of xml_tree.

	* userlist_cfg.c:
	new module `expat_iface' is used instead of direct use of the expat
	  XML parser.

	* register.c: rewritten completely.

	* makefile: `register' files are changed;
	`register' utility needs expat.

	* expat_iface.h: (struct xml_attn) `line', `column' fields are added;
	(struct xml_tree) `line', `column' fields are added;
	(xml_build_tree) `tag_map', `attn_map' are declared `const';
	(xml_build_tree_str) the same as above;
	(xml_unparse_tree) parameters are changed;
	(xml_unparse_tree_str) parameters are changed.

	* expat_iface.c:
	(struct parser_data) `tag_map', `attn_map' fields are defined `const';
	(start_hnd) `tag_map' may be NULL;
	  current line and column is stored in the tree;
	  the root tree node is saved in `parser_data' structure;
	  `attn_map' may be NULL;
	  attribute line and column are saved in the tree;
	(xml_build_tree) `tag_map', `attn_map' are declared `const';
	(xml_build_tree_str) `tag_map', `attn_map' are declared `const';
	(do_xml_unparse_tree) a new function to do XML unparsing;
	(xml_unparse_tree) a new function to do XML unparsing.

	* ejudge.ru_RU.KOI8-R.po: new messages are translated

	* ejudge.fr_FR.ISO8859-1.po: Initial revision

2002-10-19  Alexander Chernov  <cher@ispras.ru>

	* expat_iface.c, expat_iface.h: in progress...

2002-10-19  Alexander Chernov  <cher@ispras.ru>

	* team.c:
	(main) all the action, which require team<->serve interaction are
	  disabled, if `server_clients_suspended' variable is set.

	* serve.c:
	(update_status_file) score_system_val and clients_suspended are
	  written to server status;
	(is_valid_status) SCORE_OLYMPIAD score system is supported;
	(read_compile_packet) SCORE_OLYMPIAD score system is supported
	  if the contest is not over, run packet is generated to have
	  `accept_testing' parameter set;
	(read_run_packet) SCORE_OLYMPIAD score system is supported;
	(judge_rejudge_all) a new function;
	(judge_rejudge_problem) a new function;
	(judge_reset_contest) a new function;
	(judge_suspend_clients) a new function;
	(judge_resume_clients) a new function;
	(judge_cmds) new commands `REJUDGE', `REJUDGEP', `RESET',
	  `SUSPEND', `RESUME' are supported;
	(do_loop) team's packets are not processed, if clients_suspended
	  variable is set.

	* runlog.h:
	`RUN_ACCEPTED', `RUN_MAX_STATUS' are added to testing outcome
	  enumeration;
	(run_reset) a new function prototype is added.

	* runlog.c: <reuse/osdeps.h> is included;
	(run_status_str) a new return code RUN_ACCEPTED is handled;
	(run_reset) a new function to clear the submission log.

	* run.c:
	(generate_report) a new parameter `accept_testing' is accepted, if
	  this parameter is 1, only acceptance testing is performed;
	  new SCORE_OLYMPIAD score system is supported;
	(generate_team_report) a new parameter `accept_testing' is accepted;
	  new SCORE_OLYMPIAD score system is supported;
	(run_tests) a new parameter `accept_testing' is added;
	  new SCORE_OLYMPIAD score system is supported;
	(do_loop) a new parameter is the serve's packet: `accept_testing'
	  is parsed and supported;
	(check_config) number of acceptance tests cannot exceed the total
	  number of tests.

	* protocol.h: score system enumeration is also defined here;
	(struct prot_serve_status) fields `score_system', `clients_suspended'
	  are added.

	* prepare.h:
	score system enumeration definition is protected with conditional
	  compilation, as it also defined in another file (protocol.h);
	(struct section_global_data) `tests_to_accept' parameter is added;
	(struct section_problem_data) `tests_to_accept' parameter is added.

	* prepare.c: new parameter `tests_to_accept' is parsed;
	(global_init_func) `tests_to_accept' parameter is set to -1;
	(problem_init_func) `tests_to_accept' parameter is set to -1;
	(set_defaults) `tests_to_accept' parameter is processed.

	* master.c:
	new configuration parameter `problems_submit_file' to read the list
	  of all the problems;
	(print_reset_button) a new function;
	(print_suspend_button) a new function;
	(print_resume_button) a new function;
	(confirm_reset_if_asked) a new function, which generates the
	  "Confirm reset" dialog;
	(do_contest_reset_if_asked) a new function to perform contest reset;
	(do_suspend_if_asked) a new function to suspend clients;
	(do_resume_if_asked) a new function to resume clients;
	(do_rejudge_all_if_asked) a new function to rejudge all the
	  solutions;
	(do_rejudge_problem_if_asked) a new function to rejudge one particular
	  problem;
	(main) all the new master commands are supported.

	* html.c:
	(write_team_statistics) new SCORE_OLYMPIAD score system is supported;
	(do_write_kirov_standings) the same as above;
	(write_standings) the same as above;
	(write_judge_allruns) the same as above;
	(write_judge_standings) the same as above.

	* makefile: expat_iface is added to the userlist-server files.

	* files.make: expat_iface.[ch] module is added.

	* ejudge.ru_RU.KOI8-R.po: new translations added.

	* clarlog.c:
	(clar_reset) a new function, which clears the clarification log.

	* clarlog.h: (clar_reset) a prototype added.

	* clntutil.c:
	new global variables: server_score_system, server_clients_suspended;
	(client_check_server_status) new server status fields (see above)
	  are read;
	(client_print_server_status) message is printed, if clients are
	  suspended.

	* clntutil.h: new variables are exported: server_score_system,
	server_clients_suspended.

2002-10-18  Alexander Chernov  <cher@ispras.ru>

	* expat_iface.h, expat_iface.c: Initial revision

2002-10-15  Alexander Chernov  <cher@ispras.ru>

	* sformat.c, serve.c:
	the final "Local variables" section is slightly changed.

	* mkpasswd.c:
	(main) "enable-multibute-characters" directive is removed from
	  the generated LaTeX file.

	* clntutil.c, cgi.c:
	the final "Local variables" section is slightly changed.

	* userlist-server.c: (main) help message translation is disabled.

	* team.c: <sys/time.h> is included;
	new parameter `show_generation_time';
	(initialize) error messages, which are written during configuration
	  file parsing are not translatable;
	(main) client page generation time (real time) is measured and
	  displayed, if `show_generation_time' parameter is set;
	  "Submission log" is not displayed until contest is started.

	* serve.c:
	(do_loop) contest_duration == 0 is considered as infinite contest
	  duration;
	  information messages, written to log marked as not translatable.

	* register.c:
	(set_defaults) error messages are marked as not translatable;
	(initialize) error messages for client_not_configured function
	  are also marked as untranslatable.

	* prepare.c:
	(global_init_func) `contest_time' parameter is initialized to -1;
	(set_defaults) unset flag for `contest_time' is now -1.

	* mkpasswd.c: (main) team information is marked as not translatable.

	* master.c:
	(set_defaults) error messages written to the log are not marked
	  as translatable;
	(initialize) "client not configured" messages are also not translated.

	* makefile: `clean' rule is changed slightly.

	* html.c:
	(write_team_statistics) submit buttons for "View report" and
	  "View source" are generated instead of image buttons.
	(write_judge_allruns) the same as above.

	* ejudge.ru_RU.KOI8-R.po: all the messages are translated.

	* clntutil.c:
	(client_print_server_status) server_duration == 0 is considered as
	  unlimited contest and printed as "Unlimited".

	* cgi.c:
	(bad_request) message translation calls are removed, since when
	  this function works, CGI parameters are not yet parsed;
	  added actual email <cher@unicorn.cmc.msu.ru> to the message.
	(request_too_large) message translation calls are removed.

2002-10-14  Alexander Chernov  <cher@ispras.ru>

	* makefile: ejudge.ru_RU.KOI8-R.po is made writable before msgmerge.

	* ejudge.ru_RU.KOI8-R.po: Initial revision

	* .cvsignore: *** empty log message ***

	* clntutil.c: "protocol.h" is included;
	<reuse/osdeps.h> is included;
	new global variables server_clars_disabled, server_team_clars_disabled,
	  server_standings_frozen;
	(client_check_server_status) the server keepalive messages are now
	  in binary format;
	(client_print_server_status) whether the standings are frozen is
	  printed.

	* clntutil.h: copyright notice is updated;
	`server_clars_disabled', `server_team_clars_disabled',
	  `server_standings_frozen' variables are declared as external.

	* compile.c: (do_loop) serve->compile protocol is changed;
	  the loop is rearranged;
	(check_config) `queue_dir' is checked to be writable.

	* files.make: protocol.h is added.

	* html.c:
	(write_team_statistics) a message is marked as not translatable;
	  `run_get_record' now accepts more parameters;
	(do_write_kirov_standings) `run_get_record' signature changed;
	(do_write_standings) `run_get_record' signature changed;
	(write_judge_allruns) `run_get_record' signature changed;
	  run change status menu is rearranged;
	(write_team_source_view) `run_get_record' signature changed;
	(write_team_report_view) `run_get_record' signature changed.

	* makefile: *~ files are removed on `clean' rule;
	ejudge.po is also removed;
	ejudge.ru_RU.KOI8-R.po is processed by merging the previous version
	  and `ejudge.po';
	ejudge.po rule is updated;
	mo rule is added to compile the message translation catalogs.

	* master.c:
	`enable_l10n', `l10n_dir' parameters are added and parsed;
	"refresh" button is renamed to "Refresh".

	* prepare.c:
	(section_global_params) all the new global configuration parameters
	  are added;
	(section_language_params) all the new language configuration parameters
	  are added;
	(section_tester_params) all the new tester parameters are added;
	(global_init_func) a new function, which initializes global section
	  variables;
	(tester_inheritance_info) `queue_dir' is added to the inheritance list;
	(set_defaults) all the new configuration parameters are processed;
	  value `0' of `board_unfog_time' is accepted as unfog right after the
	  contest stops;
	  the upper limit on the contest duration is removed;
	(create_dirs) `queue_dir' parameters are handled;
	(print_tester) new tester parameters are printed.

	* prepare.h:
	new global parameter `autoupdate_standings'. If enabled (the default)
	  the server updates the standing when the contest status or standings
	  change;
	new global flags fog_standings_updated, start_standings_updated,
	  unfog_standings_updated which are not user-settable;
	new global parameter `disable_clars'. If set, the clarification
	  requests are completely disabled;
	new global parameter `disable_team_clars'. If set, teams cannot
	  compose clarification requests, but the judges can.
	new global parameter `enable_l10n'. If set, message translation is
	  enabled;
	new global parameter `l10n_dir', which points to the message catalog
	  directory;
	new global parameter `standings_locale' which contains the locale
	  name for standings displaying. The only supported locale is yet
	  `ru_RU.KOI8-R';
	new global parameter `compile_queue_dir' for the queue of compile
	  commands issued by the serve;
	new global parameter `run_queue_dir' for the queue of run commands
	  issued by the serve;
	new language parameter `server_queue_dir' for the queue of server
	  compile commands;
	language parameter `src_dir' is replaced with language parameter
	  `queue_dir';
	new tester parameter `server_queue_dir' for the queue of server
	  run commands;
	tester parameter `exe_dir' is replaced with tester parameter
	  `queue_dir'.

	* run.c: <locale.h> is included, if localization is enabled;
	(setup_locale) a new function, which sets up the locale by the
	  locale_id;
	(print_by_line) `file is too long' is marked as a translatable message;
	  `line is too long' is marked as a translatable message;
	(generate_report) `OK' is marked as a translatable message;
	  `Score' is marked as a translatable message;
	(generate_team_report) `OK' and `Score' are now translatable messages;
	(run_tests) `locale_id' parameter is accepted;
	  the given locale_id is activated before `generate_team_report' is
	  called, the default locale is activated after the call;
	  removed some previously commented stuff;
	(do_loop) serve->run protocol is changed;
	  loop is generally reorganized;
	(main) message translation catalogs are set up, if the localization is
	  enabled.

	* runlog.c: RUN_RECORD_SIZE increased to 105;
	(struct run_entry) field `locale_id' is added;
	(run_read_entry) `locale_id' field is read;
	(run_make_record) `locale_id' parameter is accepted;
	(run_flush_entry) `locale_id' field is written;
	(run_add_record) `locale_id' parameter is accepted;
	(run_get_param) `plocale_id' parameter is accepted;
	(run_get_record) `plocale_id' parameter is accepted;
	(run_get_fog_period) a new function, which returns:
	  -1, if the contest is not started;
	  0, if the fog perion is not started;
	  1, if the fog perion is effective;
	  2, if the fog perion ended.

	* runlog.h: copyright notice is updated;
	(run_add_record) a new parameter `locale_id' is accepted;
	(run_get_param) a new parameter `plocale_id' is accepted;
	(run_get_record) a new parameter `plocale_id' is accepted;
	(run_get_fog_period) a new function.

	* serve.c: "protocol.h" is included;
	<locale.h> is included if compile-time localization is enabled;
	(setup_locale) a new function, which sets up the current locale by
	  `locale_id' parameter;
	(update_standings_file) function is totally rewritten. It also updates
	  `start_standings_updated', `fog_standings_updated',
	  `unfog_standings_updated' depending on the time period;
	(update_status_file) function is totally rewritten. Status file now
	  has binary format (as defined in protocol.h).
	(team_view_clar) `locale_id' parameter of the command is accepted;
	  error generated, if clarifications are disabled;
	(team_send_clar) `locale_id' parameter of the command is accepted;
	  error generated, if clarifications are disabled;
	(team_submit) `locale_id' parameter of the command is accepted;
	  `locale_id' is saved in the run log;
	  serve->compile protocol is changed by using the explicit command
	  safe directories and the separate source directory;
	(team_change_passwd) `locale_id' parameter of the command is accepted;
	(team_stat) `locale_id' parameter of the command is accepted;
	(team_view_report) `locale_id' parameter of the command is accepted;
	(team_view_source) `locale_id' parameter of the command is accepted;
	(read_team_packet) locale is reset to the default (0), after the
	  function, which executes the command, is completed;
	(read_compile_packet) `locale_id' parameter is requested from the
	  run log with `run_get_param' function;
	  serve->run protocol is changed by using an expilicit command safe
	  directory queue and the separate exe directory;
	(read_run_packet) `run_get_param' now accepts pointer to `locale_id'
	  parameter, so the call is updated;
	(rejudge_run) `locale_id' is requested from run log by using changed
	  `run_get_record' function;
	  serve->compile protocol is changed (see above);
	(judge_start) standings are no longer updated from here;
	(judge_stop) standings are no longer updated from here;
	(do_loop) if the current time is in fog period, let the
	  `fog_standings_updated' variable be set;
	  standings are automatically updated right after the start, right
	  after the fog period started, right after the fog period ended;
	  if compile-time and run-time localization is enabled, program
	  message catalogs are initialized.

	* team.c: <locale.h> is included, if internalization is enabled;
	(struct section_global_data) new parameters `enable_l10n' and
	  `l10n_dir' are added;
	new global variable `client_locale_id';
	(section_global_params) `enable_l10n', `l10n_dir' parameters are
	  parsed;
	(set_defaults) error messages written to log are not localized;
	  new configuration parameters are checked;
	(read_state_params) `locale_id' parameter, which contains the
	  language identifier is passed in forms along with `login' and
	  `password' parameters;
	(display_enter_password) locale selection dialog is added;
	(print_refresh_button) the default label for the button is `Refresh';
	(get_team_statistics) added `locale_id' parameter to `STAT' request;
	(send_clar_if_asked) check that the messages are disabled is added;
	  parameter `locale_id' added to `CLAR' command;
	(submit_if_asked) parameter `locale_id' added to `SUBMIT' command;
	(change_passwd_if_asked) parameter `locale_id' added to `PASSWD'
	  command;
	(show_clar_if_asked) check that the messages are disabled is added;
	  parameter `locale_id' is added to `VIEW' command;
	(request_source_if_asked) parameter `locale_id' added to `SOURCE'
	  command;
	(request_report_if_asked) parameter `locale_id' added to `REPORT'
	  command;
	(main) message translation is set up, if CONF_HAS_LIBINTL compile-time
	  macro is set and `enable_l10n' run-time parameter is set;
	  clarification send dialog is not shown, if team clarifications are
	  disabled;
	  clarification list is now shown, if clarifications are disabled;
	  reference to "Change language" dialog is added to the fast
	  navigation menu;
	  "Change Language" dialog is activated, if localization is enabled.

2002-10-13  Alexander Chernov  <cher@ispras.ru>

	* protocol.h: Initial revision

2002-10-12  Alexander Chernov  <cher@ispras.ru>

	* ejudge.ru-KOI8_R.po: no longer used

2002-10-11  Alexander Chernov  <cher@ispras.ru>

	* prepare.c:
	(set_defaults) maximal contest_time is increased to 100 hours.

	* run.c:
	(run_tests) correct answer files are only used if `use_corr' flag is
	  set for a problem.

	* team.c:
	(main) generated html modified, so "Team standings" and "Problems"
	  open in a new window.

2002-10-09  Alexander Chernov  <cher@ispras.ru>

	* base64.c, cgi.c, clar.c, clarlog.c, clntutil.c, compile.c, html.c, mkpasswd.c, parsecfg.c, prepare.c, revinfo.c, run.c, runlog.c, serve.c, submit.c, teamdb.c:
	redundant message translations (_(...)) are removed

2002-10-08  Alexander Chernov  <cher@ispras.ru>

	* files.make: userlist_clnt.[ch] files added.

	* userlist-server.c: in progress...

	* userlist_xml.c: adapted to use in userlist-server.

	* userlist.c:
	(userlist_validate) a new name of previous `user_data_validate';
	(userlist_free) a new name of previous `user_data_free'.

	* userlist.h: 
	(userlist_free) a prototype added.

	* nls.c: <string.h> is included.

	* makefile: userlist-server file list is changed.

	* userlist_clnt.c, userlist_clnt.h: Initial revision

2002-10-07  Alexander Chernov  <cher@ispras.ru>

	* files.make: userlist-server.c added.

	* userlist_cfg.h, userlist_cfg.c: completed.

	* nls.c: windows-1251 encoding added as alias to cp1251.

	* makefile: userlist-server added to TARGETS;
	UL_CFILES, UL_OBJECTS variables declared;
	rule to compile userlist-server added.

	* userlist-server.c: Initial revision

	* .cvsignore: *** empty log message ***

2002-10-06  Alexander Chernov  <cher@ispras.ru>

	* prepare.c, prepare.h:
	added global properties `sound_player', `*_sound'.

	* run.c:
	(run_tests) playing sound, which depends on outcome of test run
	  is added.

2002-10-05  Alexander Chernov  <cher@ispras.ru>

	* run.c:
	(run_tests) `task_SetMaxRealTime' is called, if `max_real_time'
	  parameter is set.

	* prepare.h:
	(struct section_problem_data) `real_time_limit' field is added.

	* prepare.c:
	(section_problem_params) `real_time_limit' parameter is added;
	(set_defaults) `real_time_limit' problem parameter is processed.

	* clntutil.c: 
	(client_put_footer) copyright information is updated.

2002-10-03  Alexander Chernov  <cher@ispras.ru>

	* makefile: list of files are moved to a separate file `files.make'.

	* files.make: Initial revision

2002-10-02  Alexander Chernov  <cher@ispras.ru>

	* userlist_xml.c: some functions are moved to separate files.

	* nls.h: (nls_lookup_table) a new function is added.

	* userlist_cfg.h, userlist_cfg.c, utf8_utils.h, utf8_utils.c, nls.c:
	Initial revision

2002-09-30  Alexander Chernov  <cher@ispras.ru>

	* sha.h, sha.c: copyright notice is added.

	* nls_iso8859-5.c: added exported reference to translation table.

	* nls.h: #endif is fixed.

	* makefile: file list is updated (NLS files and XML parsing).

	* userlist_xml.c, userlist.h, userlist.c, nls_utf8.c:
	Initial revision

2002-09-24  Alexander Chernov  <cher@ispras.ru>

	* sha.h, sha.c: Initial revision

2002-09-01  Alexander Chernov  <cher@ispras.ru>

	* sformat.c, prepare.c, parsecfg.c: <string.h> is included.

	* mkpasswd.c, misctext.c, make-teamdb.c: copyright notice is updated;
	<string.h> is included.

2002-06-16  Alexander Chernov  <cher@ispras.ru>

	* sformat.c, serve.c, run.c: <reuse/format_io.h> is included.

2002-05-20  Alexander Chernov  <cher@ispras.ru>

	* mkChangeLog.c:
	(read_ChangeLog) internal line length limit is increased to 8192.

2002-03-30  Alexander Chernov  <cher@ispras.ru>

	* prepare.c: added missed `use_corr' problem parameter.

2002-03-22  Alexander Chernov  <cher@ispras.ru>

	* makefile: the files from reuse library are removed;
	configuration section is remade;
	reuse library is used to compile the sources.

	* pathutl.h: copyright notice is updated;
	`pathcpy', `pathcat', `path_add_dir', `path_init' functions are
	  defined `extern inline', only if compiled with gcc.

	* teamdb.c, team.c: copyright notice is updated;
	`osdeps.h', `logger.h', `xalloc.h' are included from reuse library.

	* submit.c: copyright notice is updated;
	`logger.h' is included from reuse library.

	* sformat.c: copyright notice is updated;
	`xalloc.h', `number_io.h' are included from reuse library.

	* serve.c:
	`xalloc.h', `logger.h', `osdeps.h', `number_io.h' are included from
	  reuse library.

	* runlog.c: copyright notice is updated;
	`xalloc.h', `logger.h' are included from reuse library.

	* run.c: copyright notice is updated;
	`osdeps.h', `logger.h', `exec.h', `xalloc.h', `number_io.h'
	  are included from reuse library.

	* revinfo.c: copyright notice is updated;
	(main) removal of file from the database does not cause a fatal error.

	* register.c, prepare.c: copyright notice is updated;
	`xalloc.h', `logger.h', `osdeps.h' are included from reuse library.

	* pathutl.c: copyright notice is updated;
	`osdeps.h', `logger.h' are included from reuse library.

	* parsecfg.c: copyright notice is updated;
	`xalloc.h' is included from reuse library include directory.

	* misctext.c: copyright notice is updated;
	`xalloc.h' is included from reuse library.

	* master.c: copyright notice is updated;
	`osdeps.h', `xalloc.h', `logger.h' are included from reuse library.

	* localdb.c: copyright notice is updated;
	`xalloc.h' is included from reuse library.

	* inetdb.c: copyright notice is updated;
	`xalloc.h' is include from reuse library.

	* idmap.c: copyright notice is updated;
	`xalloc.h' is included from reuse library.

	* html.c: copyright notice is updated;
	`logger.h', `xalloc.h', `osdeps.h' are include from reuse library.

	* compile.c: copyright notice is updated;
	`xalloc.h', `logger.h', `exec.h', `osdeps.h' are included from reuse
	  library.

	* clntutil.c: copyright notice is updated;
	`logger.h', `xalloc.h' are included from reuse library.

	* clarlog.c: copyright notice is updated;
	`logger.h', `xalloc.h', `osdeps.h' are included from reuse library.

	* clar.c: copyright notice is updated;
	`logger.h' is included from reuse library.

	* cgi.c: copyright notice is updated;
	`xalloc.h' is included from reuse library.

	* base64.c: copyright notice is updated;
	`logger.h' is included from reuse library.

2002-01-09  Alexander Chernov  <cher@ispras.ru>

	* sformat.c: copyright notice is updated;
	"number_io.h" is included instead of "osdeps.h" to import os_snprintf.

	* serve.c, run.c: copyright notice is updated;
	"number_io.h" is included to import os_snprintf.

	* makefile: copyright notice is updated;
	number_io.[ch] added to the list of all C and H files;
	-DR_HAS_LONGLONG added to compiler options;
	number_io.c is required to compile most of compiled binaries.

	* number_io.h:
	(os_readdf,os_readdd,os_readdld) prototypes added.

	* number_io.c:
	(os_readhf,os_readhd,os_readhld) only if endptr == 1, format error
	  is reported, if there is a garbage after number;
	(os_readdf,os_readdd,os_readdld) new functions are implemented to
	  convert floating-point number in decimal character notation into
	  internal form for floats, doubles and long doubles respectively.
	  These functions currenly use sscanf, so underflows and overflows
	  are not properly reported.

2002-01-08  Alexander Chernov  <cher@ispras.ru>

	* number_io.h: (os_readint) moved from `reuse/osdeps';
	(os_readdouble) moved from `reuse/osdeps';
	(reuse_strtoll) moved from `reuse/osdeps';
	(reuse_strtoull) moved from `reuse/osdeps';
	(os_readll) moved from `reuse/osdeps';
	(os_readull) moved from `reuse/osdeps';
	(os_writell) moved from `reuse/osdeps';
	(os_writeull) moved from `reuse/osdeps';
	(os_snprintf) moved from `reuse/osdeps';
	(os_vsnprintf) moved from `reuse/osdeps';
	(os_writehf) prototype for this new function added;
	(os_writehd) prototype for this new function added;
	(os_writehld) prototype for this new function added;
	(os_readhf) prototype for this new function added;
	(os_readhd) prototype for this new function added;
	(os_readhld) prototype for this new function added.

	* number_io.c: (os_readint) moved from `reuse/osdeps';
	(os_readdouble) moved from `reuse/osdeps';
	(reuse_strtoll) moved from `reuse/osdeps';
	(reuse_strtoull) moved from `reuse/osdeps';
	(os_readll) moved from `reuse/osdeps';
	(os_readull) moved from `reuse/osdeps';
	(os_writell) moved from `reuse/osdeps';
	(os_writeull) moved from `reuse/osdeps';
	(os_snprintf) moved from `reuse/osdeps';
	(os_vsnprintf) moved from `reuse/osdeps';
	(copy_to_buf) a new static helper function to work with limited
	  buffers;
	(os_writehf) a new function to convert `float' values to hex strings;
	(os_writehd) a new function to convert `double' values to hex strings;
	(os_writehld) a new function to convert `long double' values to hex;
	(os_readhf) a new function to parse `float' hex strings;
	(os_readhd) a new function to parse `double' hex strings;
	(os_readhld) a new function to parse `long double' hex strings.

	* osdeps.h: copyright notice is updated;
	(os_readint) moved to `reuse/number_io';
	(os_readdouble) moved to `reuse/number_io';
	(reuse_strtoll) moved to `reuse/number_io';
	(reuse_strtoull) moved to `reuse/number_io';
	(os_readll) moved to `reuse/number_io';
	(os_readull) moved to `reuse/number_io';
	(os_writell) moved to `reuse/number_io';
	(os_writeull) moved to `reuse/number_io';
	(os_snprintf) moved to `reuse/number_io';
	(os_vsnprintf) moved to `reuse/number_io'.

2002-01-07  Alexander Chernov  <cher@ispras.ru>

	* number_io.h, number_io.c: Initial revision

2001-12-26  Alexander Chernov  <cher@ispras.ru>

	* osdeps.h:
	Prototypes for new functions `os_writell', `os_writeull' added.

2001-12-09  Alexander Chernov  <cher@ispras.ru>

	* makefile: added rule `log' to generate ChangeLog;
	added compilation of mkChangeLog utility.

	* AUTHORS: initial revision

2001-12-08  Alexander Chernov  <cher@ispras.ru>

	* makefile: compilation of run.exe enabled on win32;
	-O2 insteand of -O3 on win32;
	-s during linking on win32.

	* run.c:
	(result2str) os_GetSignalString is used instead of strsignal.

2001-12-04  Alexander Chernov  <cher@ispras.ru>

	* NEWS: set the date of 1.4.0 release

2001-12-04  Alexander Chernov  <cher@ispras.ru>

	* makefile: compilation of run.exe for Windows is disabled fow now.

	* sformat.c:
	(sformat_message) os_snprintf is used instead of snprintf, this
	  allows compilation on Windows platform.

2001-12-04  Alexander Chernov  <cher@ispras.ru>

	* NEWS: Many additions for version 1.4.

	* pathutl.c, submit.c:
	meaningless change in order to normalize revision number.

	* parsecfg.c:
	(copy_param) new parameter type "x" is supported: this type means,
	  that string values to be added to extendable string array;
	(sarray_len) new function, which returns the number of strings
	  in an extendable string array;
	(sarray_free) new function, which frees memory from an extendable
	  string array;
	(sarray_merge_pf) new function, which merges two extendable string
	  arrays, freeing the second argument and preserving the first;
	(sarray_merge_arr) new function, which merges an array of extendable
	  string arrays.

	* parsecfg.h: 
	(sarray_len) new function prototype;
	(sarray_merge_pf) new function prototype;
	(sarray_free) new function prototype;
	(sarray_merge_arr) new function prototype.

	* prepare.c:
	(section_tester_params) type of `super' field changed to "x";
	  new field `clear_env' of type "d";
	  new field `start_env' of type "x";
	(tester_get_name) new function, which returns name of tester;
	(struct inheritance_info) new structure to specify inheritable fields;
	(inherit_fields) new function, which processes inheritance
	  specifications;
	(inh_isdef_int) new function;
	(inh_isdef_int2) new function;
	(inh_copy_int) new function;
	(inh_isdef_path) new function;
	(inh_isdef_path2) new function;
	(inh_copy_path) new function;
	(tester_inheritance_info) new table, which specifies, which fields
	  may be inherited for testers;
	(process_abstract_tester) new function to handle abstract testers;
	(set_defaults) `start_env' is processed: the values of supertester
	  and concrete tester are merged;
	  `errorcode_file' is checked properly for being undefined;
	  `clear_env' variable is handled;
	  single inheritance for concrete testers is allowed;
	  handling of abstract testers is moved into a separate function;
	(print_global) new function;
	(print_problem) new function;
	(print_all_problems) new function;
	(print_language) new function;
	(print_all_languages) new function;
	(print_tester) new function;
	(print_all_testers) new function;
	(print_configuration) new function, which prints all the configuration
	  variables.

	* exec.h: 
	(task_PutEnv) new function prototype;
	(task_ClearEnv) new function prototype.

2001-12-03  Alexander Chernov  <cher@ispras.ru>

	* prepare.h: include of <stdio.h> is added;
	(struct section_tester_data) type of `super' field is changed to
	  enable multiple inheritance;
	  new field `is_processed' (which may not be set from configuration
	  file). It is set to 1, when the tester is processed, i.e. fields are
	  inherited from its supertesters. Used to prevent circular
	  inheritance;
	  new field `clear_env';
	  new field `start_env';
	(print_problem) new prototype;
	(print_language) new prototype;
	(print_tester) new prototype;
	(print_global) new prototype;
	(print_all_languages) new prototype;
	(print_all_problems) new prototype;
	(print_all_testers) new prototype;
	(print_configuration) new prototype.

	* run.c:
	(run_tests) configuration variables `clear_env' and `start_env'
	  are honored when the testee program is started;
	(main) support for new option '-T' added. If this option is specified,
	  all the configuration settings are printed to stdout
	  (using print_configuration() function) and the program exits
	  with code 0.

	* compile.c, serve.c:
	(main) support for new option '-T' added. If this option is specified,
	  all the configuration settings are printed to stdout
	  (using print_configuration() function) and the program exits
	  with code 0.

2001-11-29  Alexander Chernov  <cher@ispras.ru>

	* NEWS: all the changes from 1.3.1 are documented

2001-11-08  Alexander Chernov  <cher@ispras.ru>

	* run.c:
	(struct testinfo) added field termsig to hold the termination signal;
	(result2str) 2 extra parameters added to verbosely print the
	  description of the terminating signal;
	(generate_report) updated to use the new result2str prototype;
	(generate_team_report) updated to use the new result2str prototype;
	(run_tests) added support for the new parameters:
	  `kill_signal', `no_core_dump', `max_stack_size', `max_data_size',
	  `max_vm_size';
	(run_tests) if the program is terminated due to a signal, its number
	  is saved in struct testinfo.

	* prepare.c:
	support for the new parameters `no_core_dump', `kill_signal',
	  `max_stack_size', `max_data_size', `max_vm_size' added.

	* prepare.h: new checker parameters: `no_core_dump', `kill_signal',
	  `max_stack_size', `max_data_size', `max_vm_size'.

	* exec.h: prototypes for new functions `task_SetKillSignal',
	  `task_SetStackSize', `task_SetDataSize', `task_SetVMSize',
	  `task_DisableCoreDump' added.

2001-11-07  Alexander Chernov  <cher@ispras.ru>

	* prepare.c:
	new static variables `abstr_probs', `abstr_testers', `max_abstr_prob',
	  `max_abstr_tester';
	new problem parameters `abstract', `super';
	(set_initial_values) removed since never used;
	(problem_init_func) new function, which initializes some fields in
	  a new problem data structure to a special `uninitialized' value;
	(tester_init_func) new function;
	(set_defaults)
	  1) added code to check goodness of abstract problem specification
	    (must have `short_name' field filled, cannot define `id',
	    `long_name', `super');
	  2) if the problem specification has `super' field, the corresponding
	    abstract problem is looked up;
	  3) any problem now must have `short_name' field defined;
	  4) if `long_name' is not defined, it is composed from `short_name';
	  5) for fields: `enable_rep_view', `full_score', `test_score',
	    `run_penalty', `use_stdin', `use_stdout', `time_limit',
	    `test_score_list', `test_sfx', `corr_sfx', `test_dir' (*),
	    `corr_dir' (*), `input_file', `output_file':
	    if a field is not defined in problem specification, but defined
	    in a superproblem for this problem, the field value is copied
	    from the superproblem, for fields marked (*) sformat_message
	    substitution is performed;
	  6) `test_sfx', `corr_sfx' are properly inherited from global, if
	    necessary;
	  6) added code to check abstract tester specification
	    (must define `name' field, cannot define `id', `super', `problem',
	    `problem_name');
	  7) for the following tester fields: `arch', `key', `tester_dir' (*),
	     `tmp_dir' (*), `work_dir' (*), `server_root_dir', `exe_dir' (*),
	     `is_dos', `no_redirect', `error_file' (*), `errorcode_file' (*),
	     `start_cmd', `prepare_cmd':
	    if a field is not defined in tester specification, but defined
	    in a supertester, the field value is copied
	    from the supertester, for fields marked (*) sformat_message
	    substitution is performed;
	(collect_sections)
	  1) abstract problems are collected to `abstr_probs' array;
	  2) abstract testers are collected to `abstr_testers' array;
	(prepare)
	  1) removed call of `set_initial_values';
	  2) fixed invalid usage of the 4th argument of parse_param function
	    call.

	* prepare.h:
	problem.abstract - new parameter, which is set to 1, if the problem
	  is the abstract problem specification;
	problem.use_corr - new parameter, which is set to 1, if the correct
	  answers for tests are provided. The initialization code contains
	  some heuristics to set it, if it was not set. For example, if the
	  correct answer directory was provided, this parameter is set to 1.
	problem.super - is the name of the superproblem specification
	  (which must be an abstract problem).
	  Most of the field values may be inherited from this abstract
	  problem's values.
	tester.abstract - new parameter, which is set to 1, if the tester
	  specification is abstract;
	tester.super - is the name of the supertester specification
	  (which must be an abstract tester).

	* teamdb.c:
	(teamdb_export_team) new function, which fills up a structure,
	  containing all the information about a team.

	* teamdb.h:
	(struct teamdb_export) a new structure is defined just to export
	  all the information about a team in one place. This structure
	  is then passed further to sformat_message function;
	(teamdb_export_team) a new function, which fills up this structure.

	* sformat.c: some debugging

	* run.c:
	(check_config) new tester parameter use_corr is used to decide
	  whether the correct answer files to be used.

	* pathutl.h:
	added GNU C specific function attributes to perform printf format
	checking on function calls of err and warn.

	* parsecfg.c:
	(read_variable) if only the variable name is provided, without the
	  value, "1" is assumed (like in C preprocessor -D option);
	(parse_param) section initialization function is called right
	  after xcalloc;
	(parse_param) stdout is flushed in order to not lost debugging output.

	* parsecfg.h:
	(struct config_section_info) added field `init_func' --- the initialize
	  function, which is called right after the memory for the new section
	  is allocated.

	* team.c, master.c:
	(initialize) configurable data directory is implemented --
	  CGI_DATA_PATH variable is used.

	* makefile:
	new variable CGI_DATA_PATH_FLAG allows setting of CGI scripts data dir;
	sformat.[ch] files added.

	* html.c:
	(sformat_url) function is removed, since it is superseded by a new
	  function `sformat_message' from sformat.c;
	(do_write_kirov_standings) changed to use `sformat_message';
	(do_write_standings) changed to use `sformat_message'.

	* clarlog.c: (clar_open) minor printf format warning is fixed.

	* sformat.h, sformat.c: Initial revision

2001-10-08  Alexander Chernov  <cher@ispras.ru>

	* html.c:
	(write_clar_view) team name is printed instead of team login;
	(do_write_kirov_standings) invalid <a> tag generation fixed;
	(write_judge_allclars) team name is printed instead of team login.

	* localdb.c:
	(localdb_selection_team) The team participates in selection tour,
	  if it does not participate in the training tour.

	* prepare.c:
	(create_dirs) correctly handled situation, when checker ids are
	  not successive (if testers[i] == null, it is skipped).

2001-10-05  Alexander Chernov  <cher@ispras.ru>

	* makefile: new files added

	* html.c:
	(sformat_url) new function, which formats the URL template from
	  the configuration file;
	(do_write_kirov_standings) new global parameters `prob_info_url',
	  `team_info_url' are supported;
	(do_write_standings) the same as above.

	* prepare.c: new global parameters `team_info_url', `prob_info_url'.

	* prepare.h: new parameters `team_info_url' and `prob_info_url'.

	* make-teamdb-inet.c, send-passwords.c: compilation command changed

	* teamdb.c:
	(teamdb_get_plain_password) new function, which returns the password
	  from the database in the plain text.

	* teamdb.h: new function teamdb_get_plain_password.

	* .cvsignore: new files added

	* make-teamdb.c: compilation command fixed

	* make-teamdb-inet.c, make-teamdb.c, send-passwords.c, inetdb.c, inetdb.h, localdb.c, localdb.h:
	initial revision

	* idmap.c: compilation command fixed

	* idmap.h, idmap.c: initial revision

2001-06-16  Alexander Chernov  <cher@ispras.ru>

	* osdeps.h: 1) added prototypes for os_readll, os_readull;
	2) added prototypes for reuse_strtoll, reuse_strtoull,
	   these are activated only if __REUSE_FORCE_STRTOLL macro
	   is set.

2001-05-19  Alexander Chernov  <cher@ispras.ru>

	* html.c: write_judge_allruns: new score textfield
	should not be shown not in KIROV mode

2001-05-14  Alexander Chernov  <cher@ispras.ru>

	* VERSION: boosted to 1.4

	* html.c: 1) new `write_judge_teams_view' to write to the client the
	information about all the registered teams;
	2) new `write_judge_one_team_view' to write to the client
	(detailed?) information about a particular team.

	* html.h: prototypes for new functions `write_judge_teams_view'
	and `write_judge_one_team_view' added.

	* makefile: added new `register' dependencies.

	* master.c: 1) added support for viewing and editing team information;
	2) new `add_team_if_asked' to generate NEWTEAM command to server,
	   if correspoding parameter is set;
	3) new `do_team_action_if_asked' to perform various team editing
	   actions (CHGNAME, CHGLOGIN, CHGPASSWD, CHGBAN, CHGVIS),
	   if correspoding parameters are set;
	4) new `view_one_team_if_asked' to send VTEAM command to server
	   and display the results;
	5) new `view_teams_if_asked' to sent MTEAMS or JTEAMS command
	   and display the received list of all the teams;
	6) new `print_teamview_button' to print `view teams' button.

	* prepare.c:
	new integer parameters `max_line_length', `max_file_length'
	to limit the length of line and the size of file to be inserted
	into run report generaten in `run' module.
	Default values are 4096 and 65535 bytes.

	* prepare.h:
	new integer parameters `max_line_length', `max_file_length'
	to limit the length of line and the size of file to be inserted
	into run report generaten in `run' module.

	* register.c:
	some code added (from master), but still not yet completed.

	* run.c: 1) new `print_by_line' to cut excessively long files and
	excessively long lines of program output streams;
	2) in `generate_report' all tested program output is passed
	through `print_by_line' function.

	* serve.c: 1) new judge's commands added:
	        MTEAMS          - view all the teams (master's mode);
	        JTEAMS          - view all the teams (judge's mode);
	        VTEAM           - view a particular team;
	        CHGLOGIN        - change the team's login;
	        CHGNAME         - change the team's name;
	        CHGBAN          - change the team's banned status;
	        CHGVIS          - change the team's visibility status;
	        CHGPASSWD       - change the team's password;
	        NEWTEAM         - add a new team;
	2) new function `judge_add_team' implements `NEWTEAM' command;
	3) new function `do_add_team' parses data passed by the master program
	   to prepare call of `teamdb_add_team';
	4) new function `judge_change_team_ban' implements `CHGBAN' command;
	5) new function `judge_change_team_vis' implements `CHGVIS' command;
	6) new `judge_change_team_password' implements `CHGPASSWD' command;
	7) new `judge_change_team_name' implements `CHGNAME' command;
	8) new `judge_change_team_login' implements `CHGLOGIN' command;
	9) new `judge_view_one_team' implements `VTEAM' command;
	10) new `judge_view_teams' implemets `MTEAMS' and `JTEAMS' commands;
	11) some rearrangements in error reporting code
	(report_bad_packet, report_error - new function).

	* teamdb.c: 1) transaction mode is supported for functions which update
	teamdb base. In transaction mode previous state of base
	is saved, so undo operation is possible. Transaction mode
	is entered by calling `teamdb_transaction'. Function
	`teamdb_rollback' rolls back the changes, function
	`teamdb_commit' leaves transaction mode with all changes
	performed;
	2) new function `teamdb_add_team' to add new team to database.
	The function performs all the necessary range checkings;
	3) new function `teamdb_toggle_vis' toggles visibility
	flag from normal to TEAM_INVISIBLE and back;
	4) new function `teamdb_toggle_ban' toggles availability flag
	from normal to TEAM_BANNED and back;
	5) new function `teamdb_change_login' changes login field for
	the given team;
	6) new function `teamdb_change_name' changes name field for
	the given team;
	7) new function `teamdb_is_valid_login' checks that the given
	string does not contain characters, invalid for team login;
	8) new function `teamdb_is_valid_name' checks that the given
	string may be team's name (does not contain invalid chars);
	9) new function `teamdb_get_total_teams' returns the total number
	of registered teams;
	10) new function `teamdb_write_teamdb' saves teamdb file to disk.

	* teamdb.h: new functions prototypes: teamdb_write_teamdb,
	teamdb_get_total_teams, teamdb_is_valid_login, teamdb_is_valid_name,
	teamdb_change_login, teamdb_change_name, teamdb_toggle_ban,
	teamdb_toggle_vis, teamdb_transaction, teamdb_commit, teamdb_rollback,
	teamdb_add_team.

2001-05-13  Alexander Chernov  <cher@ispras.ru>

	* TODO: put reference to html/index.html instead of previous content.

2001-05-09  Alexander Chernov  <cher@ispras.ru>

	* parsecfg.c: '%' and ';' made comment characters

2001-05-07  Alexander Chernov  <cher@ispras.ru>

	* makefile: basic compilation rules for `register' added.

2001-05-06  Alexander Chernov  <cher@ispras.ru>

	* register.c: initial revision

2001-05-02  Alexander Chernov  <cher@ispras.ru>

	* VERSION: boosted to 1.3

	* team.c, master.c:
	fixed charset passing to `client_not_configured': before `global'
	is initialized we cannot use it, so pass NULL.

	* html.c:
	1) write_team_statistics: information about scores gained for runs
	   is now showed in run statistics (only in KIROV scoring system);
	2) do_write_kirov_standings updated to use `score' field of run
	   database (scores gained for the run not counting penalties);
	3) write_judge_allruns: information about scores gained for runs
	   is now showed in run statistics (only in KIROV scoring system);
	4) write_team_source_view: run_get_record now has one more parameter.

	* run.c: 1) `struct testinfo' has two more fields: score, max_score;
	2) generate_report accepts two more parameters:
	   scores: score gained for this run, max_score: full score for this
	   problem;
	3) run report is extended both for judges and teams: it includes
	   information about scores gained for each test and for the run as
	   the whole (only in KIROV scoring system);
	4) generate_team_report accepts two more parameters:
	   scores, max_score (see above);
	5) run report packed now has three parameters instead of 2:
	   gained score included, so it is calculated in run_tests;
	6) ntests and tscores fields are filled up during initalization
	   for each problem;
	7) implemeted parsing of test_score_list and some sanity checking.

	* serve.c:
	1) updated calls to `run_change_status': new parameter newscore
	   passed as -1 where it is not relevant;
	2) run result packet now has 3 parameters instead of 2:
	   gained score is passed (used only in KIROV scoring system);
	   function `read_run_packet' updated accordingly;
	3) updated calls to `run_get_record': new parameter pscore passed
	   as NULL;
	4) `CHGSTAT' master judge command now has 4 parameters instead of 3:
	   new score is passed (used only in KIROV scoring system);
	   function `judge_change_status' is updated.

	* prepare.h: 1) new [problem] section parameter: test_score_list;
	2) added private (non-configurable) fields to
	   `struct section_problem_data':
	   ntests  - number of tests;
	   tscores - array of scores for tests.

	* prepare.c: 1) new parameter in [problem] section: test_score_list;
	2) start_cmd is concatenated with script_dir only if
	start_cmd is defined for the [tester] section;

	* master.c: 1) change_status_if_asked: support to change run score
	(if specified), applicable only to KIROV score system;
	2) command `CHGSTAT' now has 4 parameters (new parameter `score');
	3) view_report_if_asked: corrected header;

	* runlog.c:
	1) implemented function run_get_attempts, that return the number
	of attepts to solve the same problem by the same team before
	the given runid. The current implementation is dumb: it scans
	all the previous runs, it should be fixed;
	2) run_get_record accept one more parameter: pointer to variable
	to fill with score gained for this run (used only in KIROV
	score system). The pointer might be NULL, in this case nothing
	happens;
	3) run_change_status accept one more parameter: newscore: score
	for the run;
	4) record and header length increased to 99 to accomodate new
	field;
	5) new field is stored in the table: score for run, this parameter
	used in KIROV score system only, though; `struct run_entry',
	function `run_read_entry', function `run_make_record' updated
	accordingly.

	* runlog.h:
	1) run_change_status got one more parameter: score for the run;
	2) run_get_record got one more parameter: pointer to fill with score
	   for the run;
	3) new function run_get_attempts(int runid, int *pattempts)
	   this function returns the number of attempts to solve
	   the same problem by the same team, as given runid;

2001-04-28  Alexander Chernov  <cher@ispras.ru>

	* serve.c:
	fixed: judge_update_public_standings did not respond to the client,
	so it hung

	* mkpasswd.c: added option to generate tex password report

2001-04-20  Alexander Chernov  <cher@ispras.ru>

	* master.c, serve.c:
	added support for master's UPDATE command: force update
	of public standings

2001-03-31  Alexander Chernov  <cher@ispras.ru>

	* makefile: tweaks...

	* master.c: new configuration parameter conf_dir added
	partially.

	* prepare.c: bugs fixed

	* run.c: uninitialized local variable bug fixed

	* team.c: references to problems and standings are shown when
	the contest is started

	* prepare.c: Preprocessor is invoked with cpp command

	* team.c: 1) removed previously commented stuff;
	2) implemented "View Source" and "View Report";
	3) added 'charset' configuration parameter;
	4) all html headers now use this parameter.

	* serve.c: added two team commands: SOURCE, REPORT.
	added support for "KIROV" score system.

	* runlog.c, runlog.h: added RUN_PARTIAL run result.

	* run.c: 1) added support for "KIROV" score system;
	2) added support for generation of team_log;

	* prepare.h, prepare.c: new parameters:
	global:
	  team_enable_src_view
	  team_enable_rep_view
	  charset
	  team_report_archive_dir
	  run_team_report_dir
	problem:
	  team_enable_rep_view
	  full_score
	  test_score
	  run_penalty
	tester:
	  run_team_report_dir

	* master.c: 1) added 'charset' configuration parameter;
	2) all generated html headers use this parameter;
	3) removed old commented out stuff;

	* html.h: added write_team_source_view, write_team_report_view

	* html.c: 1) added "View source" and "View report" options to
	team's page, this depends on config parameters;
	2) added support for "KIROV" score system;
	3) implemeted write_team_source_view;
	4) implemeted write_team_report_view;

	* clntutil.h: charset argument added to cgi_read.

	* clntutil.c: 1) removed previously commented stuff;
	2) added charset parameter where html headers are printed;
	3) charset parameter is added to some functions.

	* cgi.h: charset argument added to cgi_read.

	* cgi.c: 1) removed previously commented stuff;
	2) added charset parameter where html headers are printed;
	3) charset parameter is added to some functions.

2001-03-25  Alexander Chernov  <cher@ispras.ru>

	* unix/unix_fileutl.h, unix/osdeps.c, unix/logger.c, unix/fileutl.c, unix/exec.c, win32/osdeps.c, win32/logger.c, win32/fileutl.c, win32/exec.c, xalloc.h, xalloc.c, version.h, teamdb.h, runlog.h, parsecfg.h, osdeps.h, misctext.h, logger.h, html.h, fileutl.h, exec.h, clntutil.h, clarlog.h, cgi.h, base64.h:
	copyright notice updated

	* makefile: 1) -D_GNU_SOURCE added for Linux;
	2) copyright notice updated.

	* clntutil.c: asprintf usage fixed

	* run.c: tTask added to c-types

	* team.c, submit.c, serve.c, runlog.c, run.c, pathutl.c, parsecfg.c, mkpasswd.c, misctext.c, master.c, html.c, compile.c, clntutil.c, clarlog.c:
	copyright notice updated

	* revinfo.c: copyright notice updated

	* prepare.h, prepare.c: 1) added global score_system parameter;
	2) copyright notice updated.

	* clar.c, cgi.c, base64.c, pathutl.h: copyright notice updated

	* teamdb.c: copyright notice updated

2000-11-05  Alexander Chernov  <cher@ispras.ru>

	* makefile 1.12: removal of revinfo added to clean rule

	* TODO 6.2: .

	* makefile 1.11: added rule force

	* prepare.h 1.9, revinfo.c 1.2, run.c 1.9, runlog.c 1.3, runlog.h 1.2, serve.c 1.10, submit.c 1.6, team.c 1.6, teamdb.c 1.6, teamdb.h 1.5, version.h 1.2, base64.c 1.3, base64.h 1.2, cgi.c 1.6, cgi.h 1.3, clar.c 1.4, clarlog.c 1.5, clarlog.h 1.4, clntutil.c 1.7, clntutil.h 1.5, compile.c 1.9, html.c 1.7, html.h 1.7, master.c 1.9, misctext.c 1.2, misctext.h 1.2, mkpasswd.c 1.4, parsecfg.c 1.5, parsecfg.h 1.5, prepare.c 1.11:
	copying conditions changed: LGPL -> GPL

	* clntutil.c 1.6:
	Copyright notice added at the bottom of the generated html page.

	* makefile 1.10: added version number tracking

	* COPYING.GPL 1.1: New file.

	* .cvsignore 6.2: x

	* TODO 6.1: new todo

	* VERSION 1.1, revinfo.c 1.1, version.h 1.1: New file.

2000-11-04  Alexander Chernov  <cher@ispras.ru>

	* makefile 1.9: dependencies regenerated;
	some other changes;

	* team.c 1.5: 1) new configuration parameters;
	2) write_log(...) is replaced with err(...) or info(...);
	3) other changes.

	* submit.c 1.5: 1) added preprocessor-related options (-D, -E);
	2) other changes.

	* run.c 1.8: many changes.

	* master.c 1.8, serve.c 1.9: many changes

	* compile.c 1.8: 1) some documentation added;
	2) write_log(...) is replaced with err(...) or info(...);
	3) added preprocessor-related (-E, -D) options;
	4) MAX_LANGUAGE is replaced with max_lang;
	5) some more changes.

	* clar.c 1.3: 1) preprocessor-related options added (-E -D);
	2) message-related functions from misctext.h
	   are used;
	3) some more changes.

	* clntutil.c 1.5:
	1) const removed from the first param of client_transaction function;
	2) sf_* function used to do checked syscalls.

	* clntutil.h 1.4:
	const removed from the first param of client_transaction function;

	* clarlog.c 1.4:
	1) write_log(...) is replaced with err(...) or info(...);
	2) macro ERR_R introduced to further simplify error reporting;
	3) sf_* read/write functions used to do checked i/o;

	* runlog.c 1.2: 1) sf_* functions from unix/fileutl are used to do
	   checked i/o;
	2) write_log(...) is replaced with err(...) or info(...) calls.

	* teamdb.c 1.5: write_log(...) is replaced with err or info calls;

	* html.c 1.6:
	1) write_log(...) mostly replaced with calls of info and err;
	2) sf_fopen function implemented to do checked fopen;
	3) many configuration parameters renamed due to changes
	   in prepare.[ch];
	4) old write_standings is split into write_standings and
	   do_write_standings, the latter is used in write_judge_standings;
	5) implemented write_judge_source_view;
	6) implemented write_judge_report_view;
	7) implemented write_judge_standings.

	* html.h 1.6: added prototypes for write_judge_source_view,
	write_judge_report_view, write_judge_standings.

	* pathutl.h 1.6: added prototypes for err and info.

	* pathutl.c 1.5:
	1) pathmake2 does not alter the path, if it starts from "./";
	2) added functions err and info;
	3) added outlined implementation of path_add_dir and path_init.

	* parsecfg.c 1.4: implemented reading from the gived file descriptor

	* parsecfg.h 1.4: added new param to function parse_param
	to read from the given FILE.

	* prepare.c 1.10: 1) many parameter names changed;
	2) new parameters added;
	3) added support for preprocessing of configuration file;
	4) other changes (don't remember which...);

	* prepare.h 1.8:
	too many changes to list, most notably, the configuration
	params names changed.

2000-11-03  Alexander Chernov  <cher@ispras.ru>

	* fileutl.h 1.7:
	added prototypes for check_executable, check_readable_dir,
	  check_writable_dir, check_writable_spool, relaxed_remove.

	* osdeps.h 6.13: 1) copyright notice updated;
	2) added proto for os_ErrorMsg;
	3) char * -> const char * for many functions.

	* logger.h 6.5: 1) copyright notice updated;
	2) char * -> const char * for write_log, vwrite_log.

	* exec.h 6.8: 1) copyright notice updated;
	2) added prototypes for task_ErrorCode, task_GetRunningTime.

	* cgi.c 1.5: 1) MAX_VALUE_SIZE increased to 128K;
	2) added function documentation.

	* base64.c 1.2: 1) added function descriptions;
	2) write_log(0, LOG_ERR ...) is replaced with err;
	3) added include for pathutl to import err();
	4) removed previously commented out debugging stuff.

2000-10-30  Alexander Chernov  <cher@ispras.ru>

	* .cvsignore 6.1: initial revision

2000-10-25  Alexander Chernov  <cher@ispras.ru>

	* master.c 1.7, team.c 1.4: 1) macro GLOBAL_PARAM is used;
	2) certain configuration parameters are renamed;
	3) initialization rewritten using path_init and path_add_dir.

	* prepare.c 1.9:
	macros GLOBAL_PARAM, PROBLEM_PARAM, LANGUAGE_PARAM, CHECKER_PARAM
	are used.

	* pathutl.h 1.5: added functions path_add_dir and path_init.

	* run.c 1.7: added support for correct answer files

	* prepare.c 1.8: directory permissions fixed for checker->exe_dir.

	* master.c 1.6: added parameter standings_url;

	* makefile 1.8: added misctext

	* html.h 1.5: prototype of write_standings changed.

	* html.c 1.5: 1) added include for misctext.h;
	2) contestlog is renamed to runlog;
	3) dur2str moved to misctext under the name duration_str;
	4) status2str moved to runlog under run_status_str;
	5) write_runs_table removed;
	6) html_armored_*, html_armor_* moved to misctext;
	7) clar_flags_to_str moved to clar under the name clar_flags_str;
	8) write_clars_table removed;

	* clntutil.h 1.3: removed prototype of client_duration_to_str.

	* clntutil.c 1.4: 1) added include directive for "misctext.h";
	2) no-cache option is added to header;
	3) client_duration_to_str moved to misctext under the name
	duration_str;

	* serve.c 1.8: 1) removed outdated "theory of operation";
	2) contestlog.h renamed to runlog.h;
	3) added include directive for misctext.h;
	4) two standings are generated: judge's and public;
	5) log_ prefix systematically replaced with run_ prefix;
	6) get_quoted_message_size moved to misctext.h under
	the name message_quoted_size;
	7) quote_message moved to misctext.h under the name
	message_quote;
	8) make_reply_subj moved to misctext.h under the name
	message_reply_subj;
	9) process_judge_reply is updated to work with new
	functions with slightly changed API;
	10) RUNSTAT, GETSTAT, CLARSTAT, CLARSTAT2 commands are
	removed.

	* z.cfg 6.7: moved to conf/server.cfg

2000-10-24  Alexander Chernov  <cher@ispras.ru>

	* clarlog.h 1.3: added proto for clar_flags_html.

	* clarlog.c 1.3: 1) CLAR_RECORD_SIZE increased to 79;
	2) implemented function clar_flags_html.

	* cgi.c 1.4: added include of cgi.h

	* contestlog.c 1.5, contestlog.h 1.5: renamed to runlog

	* TODO 1.4: most items are done.

	* misctext.c 1.1, misctext.h 1.1, runlog.c 1.1, runlog.h 1.1: New file.

2000-10-20  Alexander Chernov  <cher@ispras.ru>

	* z.cfg 6.6: corrections

	* html.h 1.4: added proto for write_judge_allstat.

	* team.c 1.3: added quick navigation with anchors

	* serve.c 1.7: 1) standings are updated more correctly;
	2) server supports JSTAT and MSTAT commands;
	3) server now sleeps for global.serve_sleep time.

	* run.c 1.6: 1) checkers are now stored in checks array;
	2) program return code can be read from a file;
	3) some new configuration parameters;

	* prepare.h 1.7: new parameters

	* prepare.c 1.7: 1) new parameters;
	2) all checkers are collected in checks table;

	* mkpasswd.c 1.3: more verbose printing of generated passwords.

	* master.c 1.5: changed navigation

	* html.c 1.4: 1) fixed bugs in standings calculation;
	2) implemented new scheme of judge status reporting.

	* fileutl.h 1.6: added prototype for make_writable.

	* exec.h 6.7: added prototype for task_Kill.

	* compile.c 1.7: added support for language specific spool directories

	* clntutil.h 1.2, clntutil.c 1.3: 1) added function client_split;
	2) added support for quick navigation (with anchors).

2000-10-18  Alexander Chernov  <cher@ispras.ru>

	* serve.c 1.6:
	prepare and create_dirs take extra argument: initialization mode

	* z.cfg 6.5: added language bc

	* submit.c 1.4, run.c 1.5:
	prepare and create_dirs take extra argument: initialization mode

	* prepare.h 1.6, prepare.c 1.6:
	added three initialization modes: PREPARE_SERVE,
	PREPARE_COMPILE, PREPARE_RUN.

	* pathutl.h 1.4: added proto of pathmake4

	* pathutl.c 1.4: added implementation of pathmake4

	* osdeps.h 6.12: fixed prototype of os_rGetBasename

	* makefile 1.7: fixes for win32

	* compile.c 1.6: 1) prepare() takes extra argument: prepare mode;
	2) create_dirs() is called with mode PREPARE_COMPILE.

	* clar.c 1.2: prepare() takes extra argument: prepare mode

2000-10-17  Alexander Chernov  <cher@ispras.ru>

	* z.cfg 6.4: *** empty log message ***

	* xalloc.h 6.5: added XALLOCA macro

	* teamdb.h 1.4: added definitions of TEAM_INVISIBLE and TEAM_BANNED

	* teamdb.c 1.4:
	implemented support for team flags (invisible and banned)

	* team.c 1.2: 1) added check that team is banned;
	2) corrections in client_put_header usage.

	* serve.c 1.5: 1) added update of standings file;
	2) maximal number of runs and clars for a team
	is checked;
	3) original message is quoted when replied by a judge;
	4) rejudge run option implemented.

	* run.c 1.4: 1) memory leak plugged;
	2) output files not attached to report if their size > 64K

	* prepare.h 1.5, prepare.c 1.5: new parameters

	* mkpasswd.c 1.2: added ability to change a team's password

	* master.c 1.4: 1) corrections in usage of client_put_header;
	2) added "YES" and "NO" buttons to judge's reply dialog.

	* html.h 1.3, html.c 1.3: implemented write_standings

	* contestlog.h 1.4: log_get_total_size rewritten as log_get_team_usage.

	* contestlog.c 1.4: 1) problem and language swapped in log_add_record;
	2) log_get_total_size rewritten as log_get_team_usage;
	3) log_get_times checks for null pointers before write to them.

	* clntutil.c 1.2: corrections is client_put_header usage

	* clarlog.h 1.2, clarlog.c 1.2:
	clar_get_from_size rewritten as clar_get_team_usage

	* TODO 1.3: progress...

	* z.cfg 6.3: changes

	* teamdb.h 1.3, teamdb.c 1.3: actually implemented

	* submit.c 1.3: added new IP-address parameter to SUBMIT directive.

	* serve.c 1.4: mostly implemented

	* run.c 1.3: 1) added initial configuration checking;
	2) bug fixes.

	* prepare.h 1.4, prepare.c 1.4: new configuration parameters

	* osdeps.h 6.11:
	added os_rDirName, os_GetWorkingDir, os_rGetWorkingDir,
	os_IsAbsolutePath.

	* master.c 1.3: 1) some stuff moved to clntutil;
	2) added reading of configuration file;
	3) added support for sending messages.

	* makefile 1.6: progress...

	* html.h 1.2, html.c 1.2: massive additions

	* fileutl.h 1.5: added permission bits to make_dir, make_all_dir

	* exec.h 6.6: added support for time-limited execution

	* contestlog.h 1.3: added IP-address

	* contestlog.c 1.3: added ip address to the record

	* compile.c 1.5: added initial configuration checking to spot
	nonexisting scripts, etc

	* cgi.c 1.3: added handling of multipart/form-data

	* TODO 1.2: progress...

	* team.c 1.1, clar.c 1.1, mkpasswd.c 1.1, clarlog.c 1.1, clarlog.h 1.1, base64.c 1.1, base64.h 1.1, clntutil.h 1.1, clntutil.c 1.1:
	New file.

2000-10-11  Alexander Chernov  <cher@ispras.ru>

	* teamdb.c 1.2, teamdb.h 1.2: added teamdb_get_login, teamdb_get_name

	* serve.c 1.3: in progress... interaction with judge client
	mostly implemented

	* run.c 1.2: major progress. still not tested though

	* prepare.c 1.3, prepare.h 1.3: new parameters

	* master.c 1.2: mostly implemented

	* makefile 1.5: added rules for master executable

	* fileutl.h 1.4: added PIPE flag

	* contestlog.c 1.2: many new functions;
	format of header and records changed;
	record size increased to 64 bytes

	* contestlog.h 1.2:
	many new functions; format of header and records changed

	* cgi.c 1.2: implemented cgi_nparam and cgi_nname

	* cgi.h 1.2: added prototypes for cgi_nparam and cgi_nname

	* z.cfg 6.2: added mandatory parameter checker.check_cmd.

	* html.h 1.1, html.c 1.1, TODO 1.1: New file.

2000-10-10  Alexander Chernov  <cher@ispras.ru>

	* master.c 1.1, cgi.h 1.1, cgi.c 1.1: New file.

	* submit.c 1.2: changes according to changes in fileutl module.

	* serve.c 1.2: in progress

	* prepare.h 1.2, prepare.c 1.2: lots of new parameters

	* pathutl.h 1.3: added proto for pathmake3 and chop.

	* pathutl.c 1.3: implemented functions pathmake3 and chop.

	* parsecfg.h 1.3: quiet_flag parameter added to function parse_param.

	* parsecfg.c 1.3: lots of new options

	* osdeps.h 6.10: 1) os_GetBasename_r renamed to os_rGetBasename;
	2) added proto for os_GetWorkingDir;
	3) added proto for os_rGetWorkingDir;
	4) added proto for os_IsAbsolutePath.

	* makefile 1.4: new utility "run" added

	* logger.h 6.4: prototype for logger_set_level added;

	* fileutl.h 1.3: major rewritings

	* exec.h 6.5: added platform-independent file open flags and
	file open modes.

	* compile.c 1.4: changes due to changes in fileutl (generic_*_file)
	and in osdeps.

	* run.c 1.1: New file.

2000-10-07  Alexander Chernov  <cher@ispras.ru>

	* r.cfg 6.2: Removed

	* t.cfg 1.2: Removed.

	* contestlog.c 1.1, teamdb.h 1.1, teamdb.c 1.1, submit.c 1.1, serve.c 1.1, prepare.h 1.1, prepare.c 1.1, contestlog.h 1.1:
	New file.

	* pathutl.h 1.2, pathutl.c 1.2: pathmake2 function added

	* parsecfg.h 1.2, parsecfg.c 1.2: enhanced

	* osdeps.h 6.9: os_GetBasename_r function added

	* makefile 1.3: in progress

	* fileutl.h 1.2: lots of functions added

	* compile.c 1.3: massive rewritings

	* z.cfg 6.1: initial revision

2000-10-03  Alexander Chernov  <cher@ispras.ru>

	* compile.c 1.2: Fixed bug in pathmake call.

	* r.cfg 6.1: New file.

	* makefile 1.2: Added dependencies for .o files;
	fixed compilation flags for win32.

2000-10-01  Alexander Chernov  <cher@ispras.ru>

	* xalloc.c 6.6: REUSE fancy stuff ("lconfig.h", "reuse/..." includes)
	is used only if __REUSE__ symbol defined.

	* exec.h 6.4: added function task_SetWorkingDir

	* osdeps.h 6.8: added function os_Sleep.

	* logger.h 6.3: 1) added proto of function logger_init_ex;
	2) removed old prototypes of fd_printf, etc.

	* pathutl.h 1.1, pathutl.c 1.1, t.cfg 1.1, parsecfg.h 1.1, parsecfg.c 1.1, fileutl.h 1.1, compile.c 1.1:
	initial revision

	* makefile 1.1: New file.

1999-08-30  Alexander Chernov  <cher@ispras.ru>

	* xalloc.c 6.5: "reuse_version.h" is included using CONF_DEPFILE macro.

1999-08-16  Alexander Chernov  <cher@ispras.ru>

	* exec.h 6.3, logger.h 6.2, osdeps.h 6.7, xalloc.c 6.4, xalloc.h 6.4:
	Copyright notice added (GNU LGPL).

	* COPYING.LGPL 6.1: *** empty log message ***

1999-08-04  Alexander Chernov  <cher@ispras.ru>

	* xalloc.h 6.3: XOFFSET, XDEREF, XPDEREF macros added.

1999-07-30  Alexander Chernov  <cher@ispras.ru>

	* osdeps.h 6.6:
	prototypes for os_AttachFILE, os_snprintf, os_vsnprintf added.

1999-07-24  Alexander Chernov  <cher@ispras.ru>

	* osdeps.h 6.5: REUSE_F_OK constant added

	* osdeps.h 6.4:   os_CheckAccess.

1999-06-02  Alexander Chernov  <cher@ispras.ru>

	* osdeps.h 6.3: added functions get_PRJ_HOME_name, get_PRJ_HOME,
	get_PRJ_CONFIG_name, get_PRJ_CONFIG

1999-05-31  Alexander Chernov  <cher@ispras.ru>

	* logger.h 6.1: copyright notice updated;
	merged with the UniCad's version of the file.

	* xalloc.h 6.2, xalloc.c 6.3:
	 const    xstrmerge*

	* osdeps.h 6.2, xalloc.c 6.2, xalloc.h 6.1: copyright notice updated;
	merged with the UniCad's version of the file.

	* exec.h 6.2: copyright notice updated;
	protection against c++ added

1999-05-30  Alexander Chernov  <cher@ispras.ru>

	* osdeps.h 6.1, exec.h 6.1: tabulation converted to spaces

	* xalloc.c 6.1:     .

	* exec.h 6.0, logger.h 6.0, osdeps.h 6.0, xalloc.h 6.0, xalloc.c 6.0:
	New file.

END

	$Id: ChangeLog,v 1.70 2004/10/01 12:38:22 cher Exp $
