Hello community, here is the log from the commit of package calcurse for openSUSE:Factory checked in at 2016-10-23 12:52:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/calcurse (Old) and /work/SRC/openSUSE:Factory/.calcurse.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "calcurse" Changes: -------- --- /work/SRC/openSUSE:Factory/calcurse/calcurse.changes 2016-08-09 22:14:37.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.calcurse.new/calcurse.changes 2016-10-23 12:53:00.000000000 +0200 @@ -1,0 +2,21 @@ +Fri Oct 21 19:08:55 UTC 2016 - [email protected] + +- Update to version 4.2.0 + * In the calendar panel, days with non-recurrent items now have + another color as days containing recurrent items only. + * Automatically select new appointments/events after creation. + * Support for (optional) dates when specifying the start/end time of items. + Allows for easily moving items and adding appointments without switching + the selected day beforehand. + * Encoding fixes in calcurse-caldav + * Avoid notification bar artifacts after leaving calcurse. + * Fixes to the key binding pagination + * Do not change selection unexpectedly after modifying items. +- Remove useless dependencies + * autoconf + * automake + * gcc + * gettext + * make + +------------------------------------------------------------------- Old: ---- calcurse-4.1.0.tar.gz New: ---- calcurse-4.2.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ calcurse.spec ++++++ --- /var/tmp/diff_new_pack.2Xo2hO/_old 2016-10-23 12:53:02.000000000 +0200 +++ /var/tmp/diff_new_pack.2Xo2hO/_new 2016-10-23 12:53:02.000000000 +0200 @@ -17,7 +17,7 @@ Name: calcurse -Version: 4.1.0 +Version: 4.2.0 Release: 0 Summary: Text-based Organizer License: BSD-2-Clause @@ -26,14 +26,9 @@ Source1: %{name}.desktop Url: http://calcurse.org BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildRequires: autoconf -BuildRequires: automake -BuildRequires: gcc -BuildRequires: gettext BuildRequires: gettext-devel BuildRequires: glibc-devel BuildRequires: libtool -BuildRequires: make BuildRequires: ncurses-devel BuildRequires: update-desktop-files @@ -51,25 +46,25 @@ %build %configure -%__make %{?_smp_flags} +make %{?_smp_flags} %install %makeinstall -%__rm -rf "%{buildroot}%{_datadir}/doc" +rm -rf "%{buildroot}%{_datadir}/doc" -%__install -D -m 0644 "%{SOURCE1}" "%{buildroot}%{_datadir}/applications/%{name}.desktop" +install -D -m 0644 "%{SOURCE1}" "%{buildroot}%{_datadir}/applications/%{name}.desktop" %if 0%{?suse_version} > 0 %suse_update_desktop_file -r "%{name}" Office Calendar %endif -%__mv \ +mv \ "%{buildroot}%{_datadir}/locale/en" \ "%{buildroot}%{_datadir}/locale/en_US" %find_lang %{name} -%__chmod 0644 AUTHORS COPYING NEWS README +chmod 0644 AUTHORS COPYING NEWS README %files %defattr(-,root,root) ++++++ calcurse-4.1.0.tar.gz -> calcurse-4.2.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/.version new/calcurse-4.2.0/.version --- old/calcurse-4.1.0/.version 2016-04-12 20:37:21.000000000 +0200 +++ new/calcurse-4.2.0/.version 2016-10-10 22:04:06.000000000 +0200 @@ -1 +1 @@ -4.1.0 +4.2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/Makefile.in new/calcurse-4.2.0/Makefile.in --- old/calcurse-4.1.0/Makefile.in 2016-04-12 20:37:10.000000000 +0200 +++ new/calcurse-4.2.0/Makefile.in 2016-10-10 22:03:48.000000000 +0200 @@ -552,7 +552,7 @@ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir @@ -578,7 +578,7 @@ @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir @@ -596,7 +596,7 @@ distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ @@ -606,7 +606,7 @@ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/NEWS new/calcurse-4.2.0/NEWS --- old/calcurse-4.1.0/NEWS 2016-04-12 16:58:57.000000000 +0200 +++ new/calcurse-4.2.0/NEWS 2016-10-10 22:02:51.000000000 +0200 @@ -1,3 +1,24 @@ +[12 Oct 2016] +Version 4.2.0: +- New features: + * In the calendar panel, days with non-recurrent items now have another color + as days containing recurrent items only. + + * Automatically select new appointments/events after creation. + + * Support for (optional) dates when specifying the start/end time of items. + Allows for easily moving items and adding appointments without switching + the selected day beforehand. + +- Bug fixes: + * Encoding fixes in calcurse-caldav (reported by Raf Czlonka). + + * Avoid notification bar artifacts after leaving calcurse. + + * Fixes to the key binding pagination (reported by Kevin Wang). + + * Do not change selection unexpectedly after modifying items. + [12 Apr 2016] Version 4.1.0: - New features: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/configure new/calcurse-4.2.0/configure --- old/calcurse-4.1.0/configure 2016-04-12 20:37:10.000000000 +0200 +++ new/calcurse-4.2.0/configure 2016-10-10 22:03:49.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for calcurse 4.1.0. +# Generated by GNU Autoconf 2.69 for calcurse 4.2.0. # # Report bugs to <[email protected]>. # @@ -580,8 +580,8 @@ # Identity of this package. PACKAGE_NAME='calcurse' PACKAGE_TARNAME='calcurse' -PACKAGE_VERSION='4.1.0' -PACKAGE_STRING='calcurse 4.1.0' +PACKAGE_VERSION='4.2.0' +PACKAGE_STRING='calcurse 4.2.0' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1304,7 +1304,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures calcurse 4.1.0 to adapt to many kinds of systems. +\`configure' configures calcurse 4.2.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1374,7 +1374,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of calcurse 4.1.0:";; + short | recursive ) echo "Configuration of calcurse 4.2.0:";; esac cat <<\_ACEOF @@ -1479,7 +1479,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -calcurse configure 4.1.0 +calcurse configure 4.2.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1848,7 +1848,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by calcurse $as_me 4.1.0, which was +It was created by calcurse $as_me 4.2.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2711,7 +2711,7 @@ # Define the identity of the package. PACKAGE='calcurse' - VERSION='4.1.0' + VERSION='4.2.0' cat >>confdefs.h <<_ACEOF @@ -7713,7 +7713,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by calcurse $as_me 4.1.0, which was +This file was extended by calcurse $as_me 4.2.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -7779,7 +7779,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -calcurse config.status 4.1.0 +calcurse config.status 4.2.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/contrib/caldav/calcurse-caldav new/calcurse-4.2.0/contrib/caldav/calcurse-caldav --- old/calcurse-4.1.0/contrib/caldav/calcurse-caldav 2016-04-12 20:37:17.000000000 +0200 +++ new/calcurse-4.2.0/contrib/caldav/calcurse-caldav 2016-10-10 22:03:58.000000000 +0200 @@ -108,6 +108,9 @@ print("> " + line) print() + if isinstance(body, str): + body = body.encode('utf-8') + conn.request(cmd, path, headers=headers, body=body) resp = conn.getresponse() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/contrib/caldav/calcurse-caldav.py new/calcurse-4.2.0/contrib/caldav/calcurse-caldav.py --- old/calcurse-4.1.0/contrib/caldav/calcurse-caldav.py 2016-03-27 12:26:18.000000000 +0200 +++ new/calcurse-4.2.0/contrib/caldav/calcurse-caldav.py 2016-06-18 10:31:32.000000000 +0200 @@ -108,6 +108,9 @@ print("> " + line) print() + if isinstance(body, str): + body = body.encode('utf-8') + conn.request(cmd, path, headers=headers, body=body) resp = conn.getresponse() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/doc/calcurse.1 new/calcurse-4.2.0/doc/calcurse.1 --- old/calcurse-4.1.0/doc/calcurse.1 2016-04-12 20:37:21.000000000 +0200 +++ new/calcurse-4.2.0/doc/calcurse.1 2016-10-10 22:04:02.000000000 +0200 @@ -2,12 +2,12 @@ .\" Title: calcurse .\" Author: [see the "Authors" section] .\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/> -.\" Date: 04/12/2016 +.\" Date: 10/10/2016 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" -.TH "CALCURSE" "1" "04/12/2016" "\ \&" "\ \&" +.TH "CALCURSE" "1" "10/10/2016" "\ \&" "\ \&" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/doc/manual.html new/calcurse-4.2.0/doc/manual.html --- old/calcurse-4.1.0/doc/manual.html 2016-04-12 20:37:19.000000000 +0200 +++ new/calcurse-4.2.0/doc/manual.html 2016-10-10 22:03:59.000000000 +0200 @@ -853,7 +853,7 @@ <div class="paragraph"><p>First you need to gunzip and untar the source archive:</p></div> <div class="listingblock"> <div class="content"> -<pre><code>$ tar zxvf calcurse-4.1.0.tar.gz</code></pre> +<pre><code>$ tar zxvf calcurse-4.2.0.tar.gz</code></pre> </div></div> <div class="paragraph"><p>Once you meet the requirements and have extracted the archive, the install process is quite simple, and follows the standard three steps process:</p></div> @@ -3205,7 +3205,7 @@ <div id="footnotes"><hr /></div> <div id="footer"> <div id="footer-text"> -Last updated 2016-04-12 17:26:37 CEST +Last updated 2016-10-10 22:02:51 CEST </div> </div> </body> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/doc/manual.txt new/calcurse-4.2.0/doc/manual.txt --- old/calcurse-4.1.0/doc/manual.txt 2016-04-12 17:26:37.000000000 +0200 +++ new/calcurse-4.2.0/doc/manual.txt 2016-10-10 22:02:51.000000000 +0200 @@ -143,7 +143,7 @@ First you need to gunzip and untar the source archive: ---- -$ tar zxvf calcurse-4.1.0.tar.gz +$ tar zxvf calcurse-4.2.0.tar.gz ---- Once you meet the requirements and have extracted the archive, the install diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/doc/submitting-patches.html new/calcurse-4.2.0/doc/submitting-patches.html --- old/calcurse-4.1.0/doc/submitting-patches.html 2016-04-12 20:37:19.000000000 +0200 +++ new/calcurse-4.2.0/doc/submitting-patches.html 2016-10-10 22:04:00.000000000 +0200 @@ -896,7 +896,7 @@ <div id="footnotes"><hr /></div> <div id="footer"> <div id="footer-text"> -Last updated 2016-03-27 12:26:18 CEST +Last updated 2016-06-18 10:31:32 CEST </div> </div> </body> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/po/calcurse.pot new/calcurse-4.2.0/po/calcurse.pot --- old/calcurse-4.1.0/po/calcurse.pot 2016-04-02 08:45:01.000000000 +0200 +++ new/calcurse-4.2.0/po/calcurse.pot 2016-10-10 22:02:51.000000000 +0200 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2016-04-02 08:45+0200\n" +"POT-Creation-Date: 2016-10-10 16:48+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <[email protected]>\n" @@ -1199,7 +1199,7 @@ msgid "Enter the day to go to [ENTER for today] : %s" msgstr "" -msgid "Enter start time ([hh:mm] or [hhmm]):" +msgid "Enter start time ([hh:mm] or [hhmm]) or date:" msgstr "" msgid "Press [Enter] to continue" Files old/calcurse-4.1.0/po/de.gmo and new/calcurse-4.2.0/po/de.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/po/de.po new/calcurse-4.2.0/po/de.po --- old/calcurse-4.1.0/po/de.po 2016-04-11 17:12:58.000000000 +0200 +++ new/calcurse-4.2.0/po/de.po 2016-10-10 22:03:57.000000000 +0200 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2016-04-02 08:45+0200\n" +"POT-Creation-Date: 2016-10-10 16:48+0200\n" "PO-Revision-Date: 2016-04-02 06:45+0000\n" "Last-Translator: Lukas Fleischer <[email protected]>\n" "Language-Team: German (http://www.transifex.com/lfleischer/calcurse/language/" @@ -1263,7 +1263,8 @@ msgid "Enter the day to go to [ENTER for today] : %s" msgstr "Zu welchem Tag soll gesprungen werden? [EINGABE für heute] : %s" -msgid "Enter start time ([hh:mm] or [hhmm]):" +#, fuzzy +msgid "Enter start time ([hh:mm] or [hhmm]) or date:" msgstr "Startuhrzeit eingeben ([hh:mm] oder [hhmm]):" msgid "Press [Enter] to continue" Files old/calcurse-4.1.0/po/en.gmo and new/calcurse-4.2.0/po/en.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/po/en.po new/calcurse-4.2.0/po/en.po --- old/calcurse-4.1.0/po/en.po 2016-04-11 17:12:58.000000000 +0200 +++ new/calcurse-4.2.0/po/en.po 2016-10-10 22:03:57.000000000 +0200 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: calcurse 1.4\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2016-04-02 08:45+0200\n" +"POT-Creation-Date: 2016-10-10 16:48+0200\n" "PO-Revision-Date: 2006-07-03 00:05+0100\n" "Last-Translator: Neil Williams <[email protected]>\n" "Language-Team: English/GB <[email protected]>\n" @@ -1283,7 +1283,7 @@ msgstr "Enter the day to go to [ENTER for today] : dd/mm/yyyy" #, fuzzy -msgid "Enter start time ([hh:mm] or [hhmm]):" +msgid "Enter start time ([hh:mm] or [hhmm]) or date:" msgstr "Enter end time ([hh:mm] or [h:mm]) or duration (in minutes) : " msgid "Press [Enter] to continue" Files old/calcurse-4.1.0/po/es.gmo and new/calcurse-4.2.0/po/es.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/po/es.po new/calcurse-4.2.0/po/es.po --- old/calcurse-4.1.0/po/es.po 2016-04-11 17:12:58.000000000 +0200 +++ new/calcurse-4.2.0/po/es.po 2016-10-10 22:03:57.000000000 +0200 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2016-04-02 08:45+0200\n" +"POT-Creation-Date: 2016-10-10 16:48+0200\n" "PO-Revision-Date: 2016-04-02 06:45+0000\n" "Last-Translator: Lukas Fleischer <[email protected]>\n" "Language-Team: Spanish (http://www.transifex.com/lfleischer/calcurse/" @@ -1208,7 +1208,7 @@ msgid "Enter the day to go to [ENTER for today] : %s" msgstr "" -msgid "Enter start time ([hh:mm] or [hhmm]):" +msgid "Enter start time ([hh:mm] or [hhmm]) or date:" msgstr "" msgid "Press [Enter] to continue" Files old/calcurse-4.1.0/po/fr.gmo and new/calcurse-4.2.0/po/fr.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/po/fr.po new/calcurse-4.2.0/po/fr.po --- old/calcurse-4.1.0/po/fr.po 2016-04-11 17:12:58.000000000 +0200 +++ new/calcurse-4.2.0/po/fr.po 2016-10-10 22:03:57.000000000 +0200 @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2016-04-02 08:45+0200\n" +"POT-Creation-Date: 2016-10-10 16:48+0200\n" "PO-Revision-Date: 2016-04-02 06:45+0000\n" "Last-Translator: Lukas Fleischer <[email protected]>\n" "Language-Team: French (http://www.transifex.com/lfleischer/calcurse/language/" @@ -1312,7 +1312,7 @@ "Saisir le jour auquel vous souhaitez vous rendre [ou simplement ENTRÉE pour " "aujourd'hui] : %s" -msgid "Enter start time ([hh:mm] or [hhmm]):" +msgid "Enter start time ([hh:mm] or [hhmm]) or date:" msgstr "" msgid "Press [Enter] to continue" Files old/calcurse-4.1.0/po/nl.gmo and new/calcurse-4.2.0/po/nl.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/po/nl.po new/calcurse-4.2.0/po/nl.po --- old/calcurse-4.1.0/po/nl.po 2016-04-11 17:12:58.000000000 +0200 +++ new/calcurse-4.2.0/po/nl.po 2016-10-10 22:03:57.000000000 +0200 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2016-04-02 08:45+0200\n" +"POT-Creation-Date: 2016-10-10 16:48+0200\n" "PO-Revision-Date: 2016-04-02 06:45+0000\n" "Last-Translator: Lukas Fleischer <[email protected]>\n" "Language-Team: Dutch (http://www.transifex.com/lfleischer/calcurse/language/" @@ -1216,7 +1216,7 @@ msgid "Enter the day to go to [ENTER for today] : %s" msgstr "" -msgid "Enter start time ([hh:mm] or [hhmm]):" +msgid "Enter start time ([hh:mm] or [hhmm]) or date:" msgstr "" msgid "Press [Enter] to continue" Files old/calcurse-4.1.0/po/pt_BR.gmo and new/calcurse-4.2.0/po/pt_BR.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/po/pt_BR.po new/calcurse-4.2.0/po/pt_BR.po --- old/calcurse-4.1.0/po/pt_BR.po 2016-04-11 17:12:58.000000000 +0200 +++ new/calcurse-4.2.0/po/pt_BR.po 2016-10-10 22:03:57.000000000 +0200 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2016-04-02 08:45+0200\n" +"POT-Creation-Date: 2016-10-10 16:48+0200\n" "PO-Revision-Date: 2016-04-02 06:45+0000\n" "Last-Translator: Lukas Fleischer <[email protected]>\n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/lfleischer/" @@ -1297,7 +1297,8 @@ msgid "Enter the day to go to [ENTER for today] : %s" msgstr "Insira o dia para ir para [ENTER para hoje] : %s" -msgid "Enter start time ([hh:mm] or [hhmm]):" +#, fuzzy +msgid "Enter start time ([hh:mm] or [hhmm]) or date:" msgstr "Insira o horário início ([hh:mm] ou [hhmm]):" msgid "Press [Enter] to continue" Files old/calcurse-4.1.0/po/ru.gmo and new/calcurse-4.2.0/po/ru.gmo differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/po/ru.po new/calcurse-4.2.0/po/ru.po --- old/calcurse-4.1.0/po/ru.po 2016-04-11 17:12:58.000000000 +0200 +++ new/calcurse-4.2.0/po/ru.po 2016-10-10 22:03:57.000000000 +0200 @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: [email protected]\n" -"POT-Creation-Date: 2016-04-02 08:45+0200\n" +"POT-Creation-Date: 2016-10-10 16:48+0200\n" "PO-Revision-Date: 2016-04-02 06:45+0000\n" "Last-Translator: Lukas Fleischer <[email protected]>\n" "Language-Team: Russian (http://www.transifex.com/lfleischer/calcurse/" @@ -1255,7 +1255,8 @@ msgid "Enter the day to go to [ENTER for today] : %s" msgstr "Переход на N-ый день [ENTER для текущего дня] : %s" -msgid "Enter start time ([hh:mm] or [hhmm]):" +#, fuzzy +msgid "Enter start time ([hh:mm] or [hhmm]) or date:" msgstr "Начало ([чч:мм] или [ччмм]): " msgid "Press [Enter] to continue" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/scripts/calcurse-upgrade new/calcurse-4.2.0/scripts/calcurse-upgrade --- old/calcurse-4.1.0/scripts/calcurse-upgrade 2016-04-12 20:37:17.000000000 +0200 +++ new/calcurse-4.2.0/scripts/calcurse-upgrade 2016-10-10 22:03:57.000000000 +0200 @@ -10,10 +10,10 @@ if [ "$1" = "--config" ]; then CONFFILE=$2 elif [ "$1" = "-h" -o "$1" = "--help" ]; then - echo "calcurse-upgrade 4.1.0" + echo "calcurse-upgrade 4.2.0" echo "$(gettext "Usage: calcurse-upgrade [-h|-v|--config <file>]")" elif [ "$1" = "-v" -o "$1" = "--version" ]; then - echo "calcurse-upgrade 4.1.0" + echo "calcurse-upgrade 4.2.0" echo "$(gettext " Copyright (c) 2004-2016 calcurse Development Team. This is free software; see the source for copying conditions. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/src/calcurse.c new/calcurse-4.2.0/src/calcurse.c --- old/calcurse-4.1.0/src/calcurse.c 2016-03-27 12:26:18.000000000 +0200 +++ new/calcurse-4.2.0/src/calcurse.c 2016-10-10 22:02:51.000000000 +0200 @@ -49,6 +49,15 @@ static void do_storage(int day_changed) { struct day_item *day = ui_day_selitem(); + union aptev_ptr item; + + if (day) { + /* + * day_process_storage() rebuilds the vector of day items, so + * we need to save the reference to the actual item here. + */ + item = day->item; + } day_process_storage(ui_calendar_get_slctd_day(), day_changed); ui_day_load_items(); @@ -56,7 +65,7 @@ if (day_changed) ui_day_sel_reset(); else if (day) - ui_day_set_selitem(day); + ui_day_set_selitem_by_aptev_ptr(item); } static inline void key_generic_change_view(void) @@ -111,7 +120,6 @@ static inline void key_generic_add_appt(void) { ui_day_item_add(); - do_storage(1); wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); } @@ -127,7 +135,6 @@ case APP: case CAL: ui_day_item_add(); - do_storage(0); wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); break; case TOD: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/src/calcurse.h new/calcurse-4.2.0/src/calcurse.h --- old/calcurse-4.1.0/src/calcurse.h 2016-03-27 12:45:58.000000000 +0200 +++ new/calcurse-4.2.0/src/calcurse.h 2016-10-10 22:02:51.000000000 +0200 @@ -628,6 +628,10 @@ GETSTRING_RET /* return was pressed without entering any text. */ }; +/* Return codes for parse_datetime(). */ +#define PARSE_DATETIME_HAS_DATE (1 << 0) +#define PARSE_DATETIME_HAS_TIME (1 << 1) + /* Week days. */ enum wday { SUNDAY, @@ -772,6 +776,7 @@ unsigned day_chk_busy_slices(struct date, int, int *); struct day_item *day_cut_item(long, int); int day_paste_item(struct day_item *, long); +int day_get_position_by_aptev_ptr(union aptev_ptr); int day_get_position(struct day_item *); struct day_item *day_get_item(int); unsigned day_item_count(int); @@ -1044,6 +1049,7 @@ /* ui-day.c */ struct day_item *ui_day_selitem(void); +void ui_day_set_selitem_by_aptev_ptr(union aptev_ptr); void ui_day_set_selitem(struct day_item *); void ui_day_item_add(void); void ui_day_item_delete(unsigned); @@ -1134,6 +1140,7 @@ int parse_time(const char *, unsigned *, unsigned *); int parse_duration(const char *, unsigned *); int parse_date_duration(const char *, unsigned *); +int parse_datetime(const char *, long *); void file_close(FILE *, const char *); void psleep(unsigned); int fork_exec(int *, int *, const char *, const char *const *); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/src/day.c new/calcurse-4.2.0/src/day.c --- old/calcurse-4.1.0/src/day.c 2016-03-27 12:26:18.000000000 +0200 +++ new/calcurse-4.2.0/src/day.c 2016-10-10 22:02:51.000000000 +0200 @@ -507,13 +507,26 @@ } /* - * Need to know if there is an item for the current selected day inside - * calendar. This is used to put the correct colors inside calendar panel. + * Check whether there is an item on a given day. + * + * Returns 2 if the selected day contains a regular event or appointment. + * Returns 1 if the selected day does not contain a regular event or + * appointment but an occurrence of a recurrent item. Returns 0 otherwise. */ int day_check_if_item(struct date day) { const time_t t = date2sec(day, 0, 0); + if (LLIST_FIND_FIRST(&eventlist, (time_t *)&t, event_inday)) + return 2; + + LLIST_TS_LOCK(&alist_p); + if (LLIST_TS_FIND_FIRST(&alist_p, (time_t *)&t, apoint_inday)) { + LLIST_TS_UNLOCK(&alist_p); + return 2; + } + LLIST_TS_UNLOCK(&alist_p); + if (LLIST_FIND_FIRST(&recur_elist, (time_t *)&t, recur_event_inday)) return 1; @@ -525,16 +538,6 @@ } LLIST_TS_UNLOCK(&recur_alist_p); - if (LLIST_FIND_FIRST(&eventlist, (time_t *)&t, event_inday)) - return 1; - - LLIST_TS_LOCK(&alist_p); - if (LLIST_TS_FIND_FIRST(&alist_p, (time_t *)&t, apoint_inday)) { - LLIST_TS_UNLOCK(&alist_p); - return 1; - } - LLIST_TS_UNLOCK(&alist_p); - return 0; } @@ -692,20 +695,25 @@ } /* Returns the position corresponding to a given item. */ -int day_get_position(struct day_item *needle) +int day_get_position_by_aptev_ptr(union aptev_ptr aptevp) { int n = 0; VECTOR_FOREACH(&day_items, n) { struct day_item *p = VECTOR_NTH(&day_items, n); /* Compare pointers. */ - if (p->item.ev == needle->item.ev) + if (p->item.ev == aptevp.ev) return n; } return -1; } +int day_get_position(struct day_item *needle) +{ + return day_get_position_by_aptev_ptr(needle->item); +} + /* Returns a structure containing the selected item. */ struct day_item *day_get_item(int item_number) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/src/notify.c new/calcurse-4.2.0/src/notify.c --- old/calcurse-4.1.0/src/notify.c 2016-03-27 12:26:18.000000000 +0200 +++ new/calcurse-4.2.0/src/notify.c 2016-10-10 22:02:51.000000000 +0200 @@ -549,6 +549,9 @@ /* Launch the notify-bar main thread. */ void notify_start_main_thread(void) { + /* Avoid starting the notification bar thread twice. */ + notify_stop_main_thread(); + pthread_create(¬ify_t_main, NULL, notify_main_thread, NULL); notify_check_next_app(0); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/src/ui-calendar.c new/calcurse-4.2.0/src/ui-calendar.c --- old/calcurse-4.1.0/src/ui-calendar.c 2016-03-27 12:26:18.000000000 +0200 +++ new/calcurse-4.2.0/src/ui-calendar.c 2016-10-10 22:02:51.000000000 +0200 @@ -435,6 +435,8 @@ } for (c_day = 1; c_day <= numdays; ++c_day, ++c_day_1, c_day_1 %= 7) { + unsigned attr; + check_day.dd = c_day; check_day.mm = slctd_day.mm; check_day.yyyy = slctd_day.yyyy; @@ -453,36 +455,27 @@ ofs_x = (w - 27) / 2 - day_1_sav - 4 * c_day; } - WINS_CALENDAR_LOCK; if (c_day == current_day->dd && current_day->mm == slctd_day.mm && current_day->yyyy == slctd_day.yyyy - && current_day->dd != slctd_day.dd) { - /* This is today, so print it in yellow. */ - custom_apply_attr(sw->inner, ATTR_LOWEST); - mvwprintw(sw->inner, ofs_y + 1, - ofs_x + day_1_sav + 4 * c_day + 1, "%2d", - c_day); - custom_remove_attr(sw->inner, ATTR_LOWEST); - } else if (c_day == slctd_day.dd) { - /* This is the selected day, print it according to user's theme. */ - custom_apply_attr(sw->inner, ATTR_HIGHEST); - mvwprintw(sw->inner, ofs_y + 1, - ofs_x + day_1_sav + 4 * c_day + 1, "%2d", - c_day); - custom_remove_attr(sw->inner, ATTR_HIGHEST); - } else if (item_this_day) { - custom_apply_attr(sw->inner, ATTR_LOW); - mvwprintw(sw->inner, ofs_y + 1, - ofs_x + day_1_sav + 4 * c_day + 1, "%2d", - c_day); - custom_remove_attr(sw->inner, ATTR_LOW); - } else { - /* otherwise, print normal days in black */ - mvwprintw(sw->inner, ofs_y + 1, - ofs_x + day_1_sav + 4 * c_day + 1, "%2d", - c_day); - } + && current_day->dd != slctd_day.dd) + attr = ATTR_LOWEST; + else if (c_day == slctd_day.dd) + attr = ATTR_HIGHEST; + else if (item_this_day == 1) + attr = ATTR_LOW; + else if (item_this_day == 2) + attr = ATTR_TRUE; + else + attr = 0; + + WINS_CALENDAR_LOCK; + if (attr) + custom_apply_attr(sw->inner, attr); + mvwprintw(sw->inner, ofs_y + 1, + ofs_x + day_1_sav + 4 * c_day + 1, "%2d", c_day); + if (attr) + custom_remove_attr(sw->inner, attr); WINS_CALENDAR_UNLOCK; } @@ -528,11 +521,13 @@ && current_day->mm == slctd_day.mm && current_day->yyyy == slctd_day.yyyy && current_day->dd != slctd_day.dd) - attr = ATTR_LOWEST; /* today, but not selected */ + attr = ATTR_LOWEST; else if (t.tm_mday == slctd_day.dd) - attr = ATTR_HIGHEST; /* selected day */ - else if (item_this_day) + attr = ATTR_HIGHEST; + else if (item_this_day == 1) attr = ATTR_LOW; + else if (item_this_day == 2) + attr = ATTR_TRUE; else attr = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/src/ui-day.c new/calcurse-4.2.0/src/ui-day.c --- old/calcurse-4.1.0/src/ui-day.c 2016-04-01 08:49:34.000000000 +0200 +++ new/calcurse-4.2.0/src/ui-day.c 2016-10-10 22:02:51.000000000 +0200 @@ -46,36 +46,37 @@ return day_get_item(listbox_get_sel(&lb_apt)); } -void ui_day_set_selitem(struct day_item *day) +void ui_day_set_selitem_by_aptev_ptr(union aptev_ptr p) { - int n = day_get_position(day); + int n = day_get_position_by_aptev_ptr(p); if (n >= 0) listbox_set_sel(&lb_apt, n); } +void ui_day_set_selitem(struct day_item *day) +{ + ui_day_set_selitem_by_aptev_ptr(day->item); +} + /* Request the user to enter a new time. */ -static int day_edit_time(int time, unsigned *new_hour, - unsigned *new_minute) +static int day_edit_time(int time) { - char *timestr = date_sec2date_str(time, "%H:%M"); + char *input = date_sec2date_str(time, "%H:%M"); const char *msg_time = - _("Enter start time ([hh:mm] or [hhmm]):"); + _("Enter start time ([hh:mm] or [hhmm]) or date:"); const char *enter_str = _("Press [Enter] to continue"); const char *fmt_msg = _("You entered an invalid time, should be [hh:mm] or [hhmm]"); + long ts = time; for (;;) { status_mesg(msg_time, ""); - if (updatestring(win[STA].p, ×tr, 0, 1) != - GETSTRING_VALID) + if (updatestring(win[STA].p, &input, 0, 1) != GETSTRING_VALID) return 0; - if (parse_time(timestr, new_hour, new_minute) == 1) { - mem_free(timestr); - return 1; - } else { - status_mesg(fmt_msg, enter_str); - wgetch(win[KEY].p); - } + if (parse_datetime(input, &ts)) + return ts; + status_mesg(fmt_msg, enter_str); + wgetch(win[KEY].p); } } @@ -88,8 +89,7 @@ const char *enter_str = _("Press [Enter] to continue"); const char *fmt_msg = _("You entered an invalid time, should be [hh:mm] or [hhmm]"); - long newtime; - unsigned hr, mn; + long end; for (;;) { int ret; @@ -101,21 +101,28 @@ } else if (ret == GETSTRING_RET) { *new_duration = 0; break; - } else if (*timestr == '+' - && parse_duration(timestr + 1, new_duration) == 1) { - *new_duration *= MININSEC; - break; - } else if (parse_time(timestr, &hr, &mn) == 1) { - newtime = update_time_in_date(start + dur, hr, mn); - *new_duration = - (newtime > - start) ? newtime - start : DAYINSEC + - newtime - start; + } + if (*timestr == '+') { + if (parse_duration(timestr + 1, new_duration)) { + *new_duration *= MININSEC; + break; + } + } + end = start + dur; + ret = parse_datetime(timestr, &end); + /* + * If the user enters a end time which is smaller than + * the start time, assume that the time belongs to the + * next day. + */ + if (!(ret & PARSE_DATETIME_HAS_DATE) && end < start) + end = date_sec_change(end, 0, 1); + if (ret) { + *new_duration = end - start; break; - } else { - status_mesg(fmt_msg, enter_str); - wgetch(win[KEY].p); } + status_mesg(fmt_msg, enter_str); + wgetch(win[KEY].p); } mem_free(timestr); @@ -126,20 +133,19 @@ static void update_start_time(long *start, long *dur, int update_dur) { long newtime; - unsigned hr, mn; int valid_date; const char *msg_wrong_time = _("Invalid time: start time must be before end time!"); const char *msg_enter = _("Press [Enter] to continue"); do { - if (!day_edit_time(*start, &hr, &mn)) + newtime = day_edit_time(*start); + if (!newtime) break; if (!update_dur) { - *start = update_time_in_date(*start, hr, mn); + *start = newtime; return; } - newtime = update_time_in_date(*start, hr, mn); if (newtime < *start + *dur) { *dur -= (newtime - *start); *start = newtime; @@ -500,7 +506,7 @@ */ void ui_day_item_add(void) { -#define LTIME 6 +#define LTIME 16 #define LDUR 12 const char *mesg_1 = _("Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:"); @@ -514,11 +520,11 @@ const char *enter_str = _("Press [Enter] to continue"); char item_time[LDUR] = ""; char item_mesg[BUFSIZ] = ""; - time_t apoint_start; - unsigned heures, minutes; - unsigned apoint_duration; - unsigned end_h, end_m; + time_t start = date2sec(*ui_calendar_get_slctd_day(), 0, 0), end; + unsigned dur; int is_appointment = 1; + int ret; + union aptev_ptr item; /* Get the starting time */ for (;;) { @@ -530,7 +536,10 @@ is_appointment = 0; break; } - if (parse_time(item_time, &heures, &minutes) == 1) + ret = parse_datetime(item_time, &start); + if (!(ret & PARSE_DATETIME_HAS_TIME)) + is_appointment = 0; + if (ret) break; status_mesg(format_message_1, enter_str); wgetch(win[KEY].p); @@ -549,27 +558,26 @@ GETSTRING_ESC) return; if (strlen(item_time) == 0) { - apoint_duration = 0; + dur = 0; break; } - if (*item_time == '+' - && parse_duration(item_time + 1, - &apoint_duration) == 1) - break; - if (parse_time(item_time, &end_h, &end_m) == 1) { - if (end_h < heures - || ((end_h == heures) - && (end_m < minutes))) { - apoint_duration = - MININSEC - minutes + end_m + - (24 + end_h - - (heures + 1)) * MININSEC; - } else { - apoint_duration = - MININSEC - minutes + end_m + - (end_h - - (heures + 1)) * MININSEC; + if (*item_time == '+') { + if (parse_duration(item_time + 1, &dur)) { + dur *= MININSEC; + break; } + } + end = start; + ret = parse_datetime(item_time, &end); + /* + * If the user enters a end time which is smaller than + * the start time, assume that the time belongs to the + * next day. + */ + if (!(ret & PARSE_DATETIME_HAS_DATE) && end < start) + end = date_sec_change(end, 0, 1); + if (ret) { + dur = end - start; break; } status_mesg(format_message_2, enter_str); @@ -581,20 +589,16 @@ if (getstring(win[STA].p, item_mesg, BUFSIZ, 0, 1) == GETSTRING_VALID) { if (is_appointment) { - apoint_start = - date2sec(*ui_calendar_get_slctd_day(), heures, - minutes); - apoint_new(item_mesg, 0L, apoint_start, - min2sec(apoint_duration), 0L); + item.apt = apoint_new(item_mesg, 0L, start, dur, 0L); if (notify_bar()) - notify_check_added(item_mesg, apoint_start, - 0L); + notify_check_added(item_mesg, start, 0L); } else { - event_new(item_mesg, 0L, - date2sec(*ui_calendar_get_slctd_day(), 0, - 0), 1); + item.ev = event_new(item_mesg, 0L, start, 1); } io_set_modified(); + day_process_storage(ui_calendar_get_slctd_day(), 0); + ui_day_load_items(); + ui_day_set_selitem_by_aptev_ptr(item); } ui_calendar_monthly_view_cache_set_invalid(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/src/utils.c new/calcurse-4.2.0/src/utils.c --- old/calcurse-4.1.0/src/utils.c 2016-03-27 12:45:31.000000000 +0200 +++ new/calcurse-4.2.0/src/utils.c 2016-10-10 22:02:51.000000000 +0200 @@ -75,6 +75,9 @@ { int was_interactive; + ui_calendar_stop_date_thread(); + io_stop_psave_thread(); + if (ui_mode == UI_CURSES) { notify_stop_main_thread(); clear(); @@ -86,11 +89,10 @@ was_interactive = 0; } - ui_calendar_stop_date_thread(); - io_stop_psave_thread(); free_user_data(); keys_free(); mem_stats(); + if (was_interactive) { if (unlink(path_cpid) != 0) EXIT(_("Could not remove calcurse lock file: %s\n"), @@ -1101,6 +1103,49 @@ return 1; } +/* + * Converts a string containing a date or a time into a time stamp. + * + * Takes a date/time string and a time stamp. If the string only contains a + * date, the date of the time stamp is updated while the time remains + * untouched. If the string only contains a time, the time of the time stamp is + * updated and the date remains the same. If the string contains both a date + * and a time, the time stamp is updated to match the given string. + * + * Returns a positive value on success and 0 on failure. The least-significant + * bit is set if the date was updated. Bit 1 is set if the time was updated. + */ +int parse_datetime(const char *string, long *ts) +{ + char *t = mem_strdup(string); + char *p = strtok(t, " "); + + unsigned int hour, minute; + int year, month, day; + struct date new_date; + int ret = 0; + + while (p) { + if (parse_date(p, conf.input_datefmt, &year, &month, &day, + ui_calendar_get_slctd_day())) { + new_date.dd = day; + new_date.mm = month; + new_date.yyyy = year; + *ts = date2sec(new_date, 0, 0) + get_item_time(*ts); + ret |= PARSE_DATETIME_HAS_DATE; + } else if (parse_time(p, &hour, &minute) == 1) { + *ts = update_time_in_date(*ts, hour, minute); + ret |= PARSE_DATETIME_HAS_TIME; + } else { + return 0; + } + p = strtok(NULL, " "); + } + + mem_free(t); + return ret; +} + void file_close(FILE * f, const char *pos) { EXIT_IF((fclose(f)) != 0, _("Error when closing file at %s"), pos); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/calcurse-4.1.0/src/wins.c new/calcurse-4.2.0/src/wins.c --- old/calcurse-4.1.0/src/wins.c 2016-03-27 12:26:18.000000000 +0200 +++ new/calcurse-4.2.0/src/wins.c 2016-10-10 22:02:51.000000000 +0200 @@ -717,11 +717,24 @@ /* Update the status bar page number to display other commands. */ void wins_other_status_page(int panel) { - int max_page = bindings_size / (KEYS_CMDS_PER_LINE * 2 - 1) + 1; + /* + * Determine the number of completely filled pages of key bindings. + * There are two lines of bindings and KEYS_CMDS_PER_LINE bindings per + * line. On each page (other than the last page), one slot is reserved + * for OtherCmd. + */ + const int slots_per_page = KEYS_CMDS_PER_LINE * 2 - 1; + int max_page = bindings_size / slots_per_page; - /* There is no "OtherCmd" on the last page. */ - if (bindings_size % (KEYS_CMDS_PER_LINE * 2 - 1) == 1) - max_page--; + /* + * The result of the previous computation might have been rounded down. + * In this case, there are some bindings left. If there is exactly one + * binding left, it can be squashed onto the last page in place of the + * OtherCmd binding. If there are at least two bindings left, we need + * to add another page. + */ + if (bindings_size % slots_per_page > 1) + max_page++; status_page = (status_page % max_page) + 1; }
