calcurse-4.0.0/0000755000175000017500000000000012472330453010320 500000000000000calcurse-4.0.0/configure.ac0000644000175000017500000001617412273003161012527 00000000000000#------------------------------------------------------------------------------- # Init #------------------------------------------------------------------------------- AC_PREREQ(2.59) AC_INIT([calcurse], m4_esyscmd([build-aux/git-version-gen .version]), [bugs@calcurse.org]) AM_INIT_AUTOMAKE #m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.14.1]) AC_CONFIG_SRCDIR([src/calcurse.c]) AC_CONFIG_HEADER([config.h]) #------------------------------------------------------------------------------- # Checks for system type #------------------------------------------------------------------------------- AC_CANONICAL_HOST #------------------------------------------------------------------------------- # Checks for programs #------------------------------------------------------------------------------- AC_PROG_CC #------------------------------------------------------------------------------- # Checks for header files #------------------------------------------------------------------------------- AC_HEADER_STDC AC_CHECK_HEADERS([ctype.h getopt.h locale.h math.h signal.h stdio.h stdlib.h \ string.h sys/stat.h sys/types.h sys/wait.h time.h unistd.h \ fcntl.h paths.h errno.h limits.h regex.h]) #------------------------------------------------------------------------------- # Checks for system libs #------------------------------------------------------------------------------- AC_CHECK_FUNC(initscr,, [ available_ncurses="none" for lib in ncursesw ncurses do AC_CHECK_LIB($lib, initscr, [available_ncurses="$lib"; break]) done if test "$available_ncurses" = none; then AC_MSG_ERROR(Either ncurses or ncursesw library is required to build calcurse!) elif test "$available_ncurses" = ncursesw; then AC_CHECK_HEADERS([ncursesw/ncurses.h],, [AC_CHECK_HEADERS([ncurses.h],, AC_MSG_ERROR([Missing ncursesw header file]))]) else AC_CHECK_HEADERS([ncurses/ncurses.h],, [AC_CHECK_HEADERS([ncurses.h],, AC_MSG_ERROR([Missing ncurses header file]))]) fi LIBS="$LIBS -l$available_ncurses" ]) AC_CHECK_HEADERS([pthread.h], [ AC_CHECK_LIB(pthread, pthread_create, [ LIBS="$LIBS -pthread" AC_DEFINE(HAVE_LIBPTHREAD, 1, [Define to 1 if you have the 'pthread' library (-pthread).]) ], AC_MSG_ERROR(The pthread library is required in order to build calcurse!)) ], AC_MSG_ERROR(The pthread header is required in order to build calcurse!)) AC_CHECK_HEADERS([math.h], [ AC_CHECK_LIB(m, exp, [ LIBS="$LIBS -lm" AC_DEFINE(HAVE_LIBMATH, 1, [Define to 1 if you have the 'math' library (-lm).]) ], AC_MSG_ERROR(The math library is required in order to build calcurse!)) ], AC_MSG_ERROR(The math header is required in order to build calcurse!)) #------------------------------------------------------------------------------- # Check whether to build documentation #------------------------------------------------------------------------------- AC_ARG_ENABLE(docs, AS_HELP_STRING([--disable-docs], [skip documentation]), [enabledocs=$enableval], [enabledocs=yes]) if test x"$enabledocs" != x"yes"; then enabledocs=no AC_MSG_WARN([Skipping documentation!]) fi AC_MSG_CHECKING([whether to include documentation]) AC_MSG_RESULT($enabledocs) AM_CONDITIONAL(ENABLE_DOCS, test x"$enabledocs" = x"yes") AC_ARG_WITH(asciidoc, AS_HELP_STRING([--with-asciidoc], [use AsciiDoc to regenerate documentation]), [use_asciidoc=$withval], [use_asciidoc="auto"]) if test x"$use_asciidoc" = x"auto"; then AC_PATH_PROG([ASCIIDOC], [asciidoc]) if test -z "$ASCIIDOC"; then have_asciidoc=no AC_MSG_WARN([AsciiDoc not found - cannot rebuild documentation!]) else have_asciidoc=yes fi AC_PATH_PROG([A2X], [a2x]) if test -z "$A2X"; then have_a2x=no AC_MSG_WARN([a2x not found - cannot rebuild man pages!]) else have_a2x=yes fi elif test x"$use_asciidoc" = x"yes"; then AC_PATH_PROG([ASCIIDOC], [asciidoc]) if test -z "$ASCIIDOC"; then AC_MSG_ERROR([AsciiDoc not found and "--with-asciidoc" specified!]) fi AC_PATH_PROG([A2X], [a2x]) if test -z "$A2X"; then AC_MSG_ERROR([a2x not found and "--with-asciidoc" specified!]) fi have_asciidoc=yes elif test x"$use_asciidoc" = x"no"; then AC_MSG_WARN([Will not rebuild documentation!]) have_asciidoc=no have_a2x=no fi AM_CONDITIONAL(HAVE_ASCIIDOC, test $have_asciidoc = yes) AM_CONDITIONAL(HAVE_A2X, test $have_a2x = yes) #------------------------------------------------------------------------------- # Compilation options #------------------------------------------------------------------------------- CFLAGS="$CFLAGS -Wall" AC_ARG_ENABLE(memory_debug, AS_HELP_STRING([--enable-memory-debug], [use memory debug functions]), memdebug=$enableval) if test "$memdebug" != "yes"; then memdebug=no AC_DEFINE(CALCURSE_MEMORY_DEBUG_DISABLED, 1, [Define to 1 if you do not want memory debug.]) else AC_DEFINE(CALCURSE_MEMORY_DEBUG, 1, [Define to 1 if you want memory debug.]) fi AC_MSG_CHECKING([if memory debug should be used]) AC_MSG_RESULT($memdebug) AM_CONDITIONAL(CALCURSE_MEMORY_DEBUG, test x$memdebug = xyes) #------------------------------------------------------------------------------- # Create Makefiles #------------------------------------------------------------------------------- AC_OUTPUT(Makefile doc/Makefile src/Makefile test/Makefile scripts/Makefile \ po/Makefile.in po/Makefile) #------------------------------------------------------------------------------- # Summary #------------------------------------------------------------------------------- echo echo "========================================================================" echo "$PACKAGE is configured as follows." echo "Please check that this configuration matches your expectations." echo "Also give a look at the config.h file to check for preprocessor symbols." echo echo "Host system type : $host" echo echo "Options used to compile and link:" echo " PREFIX = $prefix" echo " VERSION = $PACKAGE_VERSION" echo " CC = $CC" echo " CFLAGS = $CFLAGS" echo " CPPFLAGS = $CPPFLAGS" echo " DEFS = $DEFS" echo " LD = $LD" echo " LDFLAGS = $LDFLAGS" echo " LIBS = $LIBS" echo "========================================================================" echo calcurse-4.0.0/config.rpath0000755000175000017500000003521312472330376012560 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2003 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux*) case $CC in icc|ecc) wl='-Wl,' ;; ccc) wl='-Wl,' ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; sco3.2v5*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) wl='-Wl,' ;; sysv4*MP*) ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi4*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then hardcode_direct=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10* | hpux11*) if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4.2uw2*) hardcode_direct=yes hardcode_minus_L=no ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) ;; sysv5*) hardcode_libdir_flag_spec= ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. libname_spec='lib$name' case "$host_os" in aix3*) ;; aix4* | aix5*) ;; amigaos*) ;; beos*) ;; bsdi4*) ;; cygwin* | mingw* | pw32*) shrext=.dll ;; darwin* | rhapsody*) shrext=.dylib ;; dgux*) ;; freebsd1*) ;; freebsd*) ;; gnu*) ;; hpux9* | hpux10* | hpux11*) case "$host_cpu" in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac ;; irix5* | irix6* | nonstopux*) case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux*) ;; netbsd*) ;; newsos6) ;; nto-qnx) ;; openbsd*) ;; os2*) libname_spec='$name' shrext=.dll ;; osf3* | osf4* | osf5*) ;; sco3.2v5*) ;; solaris*) ;; sunos4*) ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ;; sysv4*MP*) ;; uts4*) ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_DOCS_TRUE@am__append_1 = doc subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = po src test scripts doc am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ ABOUT-NLS AUTHORS COPYING INSTALL NEWS README compile \ config.guess config.rpath config.sub install-sh missing \ mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 SUBDIRS = po src test scripts $(am__append_1) EXTRA_DIST = \ INSTALL \ ABOUT-NLS BUILT_SOURCES = $(top_srcdir)/.version all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @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 $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile $(top_srcdir)/.version: echo $(VERSION) > $@-t && mv $@-t $@ dist-hook: echo $(VERSION) > $(distdir)/.version # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: calcurse-4.0.0/AUTHORS0000644000175000017500000000011612273003161011276 00000000000000Frederic Culot Lukas Fleischer calcurse-4.0.0/COPYING0000644000175000017500000000252412472326722011302 00000000000000Copyright (c) 2004-2015 calcurse Development Team All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. calcurse-4.0.0/Makefile.am0000644000175000017500000000046612273003161012272 00000000000000AUTOMAKE_OPTIONS= foreign ACLOCAL_AMFLAGS = -I m4 SUBDIRS = po src test scripts if ENABLE_DOCS SUBDIRS += doc endif EXTRA_DIST = \ INSTALL \ ABOUT-NLS BUILT_SOURCES = $(top_srcdir)/.version $(top_srcdir)/.version: echo $(VERSION) > $@-t && mv $@-t $@ dist-hook: echo $(VERSION) > $(distdir)/.version calcurse-4.0.0/po/0000755000175000017500000000000012472330423010733 500000000000000calcurse-4.0.0/po/Rules-quot0000644000175000017500000000337612472330401012663 00000000000000# Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header calcurse-4.0.0/po/en.po0000644000175000017500000016560112472326722011635 00000000000000# English/GB translation of calcurse. # Copyright (C) 2006 Copyright (c) Frederic Culot # This file is distributed under the same license as the calcurse package. # Neil Williams , 2006. # , fuzzy # # msgid "" msgstr "" "Project-Id-Version: calcurse 1.4\n" "Report-Msgid-Bugs-To: bugs@calcurse.org\n" "POT-Creation-Date: 2015-02-22 10:37+0100\n" "PO-Revision-Date: 2006-07-03 00:05+0100\n" "Last-Translator: Neil Williams \n" "Language-Team: English/GB \n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" msgid "null pointer" msgstr "" #, fuzzy msgid "date error in appointment" msgstr "Appointment :" #, fuzzy msgid "no such appointment" msgstr "Appointment :" #, fuzzy msgid "" "Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" " [-c] [-D] [-S] [--status]\n" " [--read-only]\n" msgstr "Usage: calcurse [-h | -v] [-at] [-d date|num] [-c file]\n" msgid "Try 'calcurse -h' for more information.\n" msgstr "Try 'calcurse -h' for more information.\n" #, fuzzy msgid "" "\n" "Copyright (c) 2004-2015 calcurse Development Team.\n" "This is free software; see the source for copying conditions.\n" msgstr "" "\n" "Copyright (c) 2004-2006 Frederic Culot.\n" "This is free software; see the source for copying conditions.\n" #, c-format msgid "Calcurse %s - text-based organizer\n" msgstr "Calcurse %s - text-based organizer\n" msgid "" "\n" "For more information, type '?' from within Calcurse, or read the manpage.\n" msgstr "" "\n" "For more information, type '?' from within Calcurse, or read the manpage.\n" #, fuzzy msgid "Mail feature requests and suggestions to .\n" msgstr "Mail bug reports and suggestions to .\n" #, fuzzy msgid "Mail bug reports to .\n" msgstr "Mail bug reports and suggestions to .\n" #, fuzzy msgid "" "\n" "Miscellaneous:\n" " -h, --help\n" "\tprint this help and exit.\n" "\n" " -v, --version\n" "\tprint calcurse version and exit.\n" "\n" " --status\n" "\tdisplay the status of running instances of calcurse.\n" "\n" " --read-only\n" "\tDon't save configuration nor appointments/todos. Use with care.\n" "\n" "Files:\n" " -c , --calendar \n" "\tspecify the calendar to use (has precedence over '-D').\n" "\n" " -D , --directory \n" "\tspecify the data directory to use.\n" "\tIf not specified, the default directory is ~/.calcurse\n" "\n" "Non-interactive:\n" " -a, --appointment\n" " \tprint events and appointments for current day and exit.\n" "\n" " -d , --day \n" "\tprint events and appointments for or upcoming days and\n" "\texit. To specify both a starting date and a range, use the\n" "\t'--startday' and the '--range' option.\n" "\n" " -g, --gc\n" "\trun the garbage collector for note files and exit. \n" "\n" " -i , --import \n" "\timport the icalendar data contained in . \n" "\n" " -n, --next\n" "\tprint next appointment within upcoming 24 hours and exit. Also given\n" "\tis the remaining time before this next appointment.\n" "\n" " -l , --limit \n" "\tonly print information regarding the next items. \n" "\n" " -r[num], --range[=num]\n" "\tprint events and appointments for the [num] number of days\n" "\tand exit. If no [num] is given, a range of 1 day is considered.\n" "\n" " -s[date], --startday[=date]\n" "\tprint events and appointments from [date] and exit.\n" "\tIf no [date] is given, the current day is considered.\n" "\n" " -S, --search=\n" "\tsearch for the given regular expression within events, appointments,\n" "\tand todos description.\n" "\n" " -t[num], --todo[=num]\n" "\tprint todo list and exit. If the optional number [num] is given,\n" "\tthen only todos having a priority equal to [num] will be returned.\n" "\tThe priority number must be between 1 (highest) and 9 (lowest).\n" "\tIt is also possible to specify '0' for the priority, in which case\n" "\tonly completed tasks will be shown.\n" "\n" " -x[format], --export[=format]\n" "\texport user data to the specified format. Events, appointments and\n" "\ttodos are converted and echoed to stdout.\n" "\tTwo possible formats are available: 'ical' and 'pcal'.\n" "\tIf the optional argument format is not given, ical format is\n" "\tselected by default.\n" "\tnote: redirect standard output to export data to a file,\n" "\tby issuing a command such as: calcurse --export > calcurse.dat\n" msgstr "" "\n" "Miscellaneous:\n" " -h\t\tprint this help and exit.\n" " -v\t\tprint calcurse version and exit.\n" "\n" "Options:\n" " -c \tspecify the calendar to use.\n" "\n" "Non-interactive:\n" " -a \t\tprint events and appointments for current day and exit.\n" " -d \tprint events and appointments for or upcoming\n" "\t\tdays and exit.\n" " -t\t\tprint todo list and exit.\n" "\n" "For more information, type '?' from within Calcurse, or read the manpage.\n" "Mail bug reports and suggestions to .\n" #, c-format msgid "" "Error: both calcurse (pid: %d) and its daemon (pid: %d)\n" "seem to be running at the same time!\n" "Please check manually and restart calcurse.\n" msgstr "" #, c-format msgid "calcurse is running (pid %d)\n" msgstr "" #, c-format msgid "calcurse is running in background (pid %d)\n" msgstr "" msgid "calcurse is not running\n" msgstr "" msgid "completed tasks:\n" msgstr "" msgid "to do:\n" msgstr "to do:\n" #, fuzzy msgid "next appointment:\n" msgstr "Appointment :" #, c-format msgid "invalid date: %s" msgstr "" #, c-format msgid "invalid range: %s" msgstr "" #, c-format msgid "invalid priority: %s" msgstr "" #, c-format msgid "invalid export format: %s" msgstr "" msgid "invalid filter mask" msgstr "" msgid "cannot handle more than one regular expression" msgstr "" #, c-format msgid "could not compile regular expression: %s" msgstr "" #, c-format msgid "invalid date range: %s" msgstr "" msgid "invalid argument combination" msgstr "" msgid "cannot specify a range and an end date" msgstr "" msgid "Export to (i)cal or (p)cal format?" msgstr "" msgid "[ip]" msgstr "" #, fuzzy msgid "Do you really want to quit?" msgstr "Do you really want to quit ?" msgid "Command:" msgstr "" #, c-format msgid "Help topic does not exist: %s" msgstr "" #, c-format msgid "No such command: %s" msgstr "" #, fuzzy msgid "unknown color" msgstr "Colour" #, fuzzy msgid "failed to open configuration file" msgstr "Failed to open config file" #, c-format msgid "invalid configuration directive: \"%s\"" msgstr "" msgid "" "Pre-3.0.0 configuration file format detected, please upgrade running " "`calcurse-upgrade`." msgstr "" #, fuzzy, c-format msgid "configuration variable unknown: \"%s\"" msgstr "FATAL ERROR in fill_config_var: wrong configuration variable format.\n" #, fuzzy, c-format msgid "wrong configuration variable format for \"%s\"" msgstr "FATAL ERROR in fill_config_var: wrong configuration variable format.\n" #, fuzzy msgid "layout configuration" msgstr "CalCurse %s | general options" msgid "Foreground" msgstr "" msgid "Background" msgstr "" msgid "(terminal's default)" msgstr "" #, fuzzy msgid "color theme" msgstr "CalCurse %s | help" #, fuzzy msgid "(if set to YES, compact panels are used)" msgstr "(if set to YES, progress bar will not be displayed when saving data)" msgid "Calendar" msgstr "Calendar" msgid "Appointments" msgstr "Appointments" msgid "TODO" msgstr "" msgid "(specifies the panel that is selected by default)" msgstr "" msgid "(if set to YES, automatic save is done when quitting)" msgstr "(if set to YES, automatic save is done when quitting)" msgid "(run the garbage collector when quitting)" msgstr "" msgid "(if not null, automatically save data every 'periodic_save' minutes)" msgstr "" msgid "(if set to YES, confirmation is required before quitting)" msgstr "(if set to YES, confirmation is required before quitting)" msgid "(if set to YES, confirmation is required before deleting an event)" msgstr "(if set to YES, confirmation is required before deleting an event)" #, fuzzy msgid "(if set to YES, messages about loaded and saved data will be displayed)" msgstr "" "(if set to YES, messages about loaded and saved data will not be displayed)" #, fuzzy msgid "(if set to YES, progress bar will be displayed when saving data)" msgstr "(if set to YES, progress bar will not be displayed when saving data)" msgid "Monday" msgstr "" msgid "Sunday" msgstr "" msgid "(specifies the first day of week in the calendar view)" msgstr "" msgid "(Format of the date to be displayed in non-interactive mode)" msgstr "" msgid "(Format to be used when entering a date: " msgstr "" #, fuzzy msgid "Enter an option number to change its value" msgstr "Enter an option number to change its value [Q to quit] " msgid "(Press '^P' or '^N' to move up or down, 'Q' to quit)" msgstr "" msgid "Enter the date format (see 'man 3 strftime' for possible formats) " msgstr "" #, fuzzy msgid "Enter the date format: " msgstr "Enter the new ToDo item : " msgid "Enter the delay, in minutes, between automatic saves (0 to disable) " msgstr "" #, fuzzy msgid "general options" msgstr "CalCurse %s | general options" msgid "Undefined option!" msgstr "" msgid "undefined" msgstr "" #, fuzzy msgid "keys configuration" msgstr "CalCurse %s | general options" msgid "Press the key you want to assign to:" msgstr "" msgid "This key is not yet recognized by calcurse, please choose another one." msgstr "" #, c-format msgid "This key is already in use for %s, please choose another one." msgstr "" msgid "Some actions do not have any associated key bindings!" msgstr "" msgid "" "Sorry, colors are not supported by your terminal\n" "(Press [ENTER] to continue)" msgstr "" "Sorry, colours are not supported by your terminal\n" "(Press [ENTER] to continue)" msgid "unknown item type" msgstr "" #, fuzzy msgid "Event:" msgstr "Event :" #, fuzzy msgid "Appointment:" msgstr "Appointment :" #, fuzzy, c-format msgid "Could not stop daemon properly: %s\n" msgstr "Enter description :" #, c-format msgid "terminated at %s with signal %d\n" msgstr "" #, fuzzy, c-format msgid "Could not remove daemon lock file: %s\n" msgstr "Enter description :" #, fuzzy, c-format msgid "Could not fork: %s\n" msgstr "Enter description :" #, c-format msgid "Could not detach from the controlling terminal: %s\n" msgstr "" #, fuzzy, c-format msgid "Could not change working directory: %s\n" msgstr "Enter description :" msgid "Cannot daemonize, aborting\n" msgstr "" #, fuzzy msgid "Could not set lock file\n" msgstr "Enter description :" #, fuzzy, c-format msgid "Could not access \"%s\": %s\n" msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, c-format msgid "started at %s\n" msgstr "" #, fuzzy msgid "error loading next appointment\n" msgstr "Appointment :" #, c-format msgid "launching notification at %s for: \"%s\"\n" msgstr "" msgid "error while sending notification\n" msgstr "" #, c-format msgid "sleeping at %s for %d second\n" msgid_plural "sleeping at %s for %d seconds\n" msgstr[0] "" msgstr[1] "" #, c-format msgid "awakened at %s\n" msgstr "" #, fuzzy, c-format msgid "Could not stop calcurse daemon: %s\n" msgstr "Enter description :" msgid "date error in event" msgstr "" #, fuzzy msgid "date error in the event\n" msgstr "FATAL ERROR in event_scan: date error in the event\n" msgid "Internal error: line too long" msgstr "" msgid "out of memory" msgstr "" #, fuzzy msgid "unknown ical type" msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" msgid "recurrence frequence not found." msgstr "" msgid "recurrence frequence not recognized." msgstr "" msgid "recurrence rule malformed." msgstr "" msgid "recurrence exception dates malformed." msgstr "" #, fuzzy msgid "could not get entire item description." msgstr "Enter description :" msgid "description malformed." msgstr "" msgid "appointment has no start time." msgstr "" msgid "could not compute duration (no end time)." msgstr "" msgid "item has a negative duration." msgstr "" #, fuzzy msgid "event date is not defined." msgstr "The day you entered is not valid" msgid "item could not be identified." msgstr "" #, fuzzy msgid "could not retrieve item summary." msgstr "Enter description :" msgid "could not retrieve event start time." msgstr "" msgid "could not retrieve event end time." msgstr "" msgid "item duration malformed." msgstr "" msgid "The ical file seems to be malformed. The end of item was not found." msgstr "" msgid "item priority is not acceptable (must be between 1 and 9)." msgstr "" msgid "Warning: ical header malformed or wrong version number. Aborting..." msgstr "" msgid "Saving..." msgstr "Saving..." msgid "Loading..." msgstr "Loading..." #, fuzzy msgid "Exporting..." msgstr "aborting...\n" msgid "Internal error while displaying progress bar" msgstr "" msgid "Choose the file used to export calcurse data:" msgstr "" msgid "The file cannot be accessed, please enter another file name." msgstr "" #, fuzzy msgid "Press [ENTER] to continue." msgstr "Press [ENTER] to continue" #, fuzzy, c-format msgid "Failed to open \"%s\", - %s\n" msgstr "Failed to open todo file" msgid "Failed to build message\n" msgstr "" #, c-format msgid "Failed to print message \"%s\"\n" msgstr "" #, c-format msgid "Failed to close \"%s\" - %s\n" msgstr "" #, c-format msgid "%s does not exist" msgstr "" msgid "Problems accessing data file ..." msgstr "Problems accessing data file ..." msgid "The data files were successfully saved" msgstr "The data files were successfully saved" msgid "Press [ENTER] to continue" msgstr "Press [ENTER] to continue" #, fuzzy msgid "failed to open appointment file" msgstr "Failed to open config file" #, fuzzy msgid "syntax error in the item date" msgstr "FATAL ERROR in load_app: syntax error in the item date\n" #, fuzzy msgid "no event nor appointment found" msgstr "FATAL ERROR in load_app: no event nor appointment found\n" #, fuzzy msgid "syntax error in item time or duration" msgstr "FATAL ERROR in load_app: syntax error in the item date\n" #, fuzzy msgid "syntax error in item identifier" msgstr "FATAL ERROR in load_app: syntax error in the item date\n" #, fuzzy msgid "wrong format in the appointment or event" msgstr "FATAL ERROR in load_app: wrong format in the appointment or event\n" #, fuzzy msgid "syntax error in item repetition" msgstr "FATAL ERROR in load_app: syntax error in the item date\n" #, fuzzy msgid "failed to open todo file" msgstr "Failed to open todo file" #, fuzzy msgid "The data files were reloaded successfully" msgstr "The data files were successfully saved" msgid "There are unsaved modifications:" msgstr "" msgid "(d)iscard" msgstr "" msgid "(m)erge" msgstr "" msgid "(k)eep and cancel" msgstr "" msgid "[dmk]" msgstr "" #, fuzzy msgid "failed to open key file" msgstr "Failed to open todo file" msgid "" "\n" "Too many errors while reading configuration file!\n" "Please backup your keys file, remove it from directory, and launch calcurse " "again.\n" msgstr "" msgid "Could not read key label" msgstr "" msgid "Key label not recognized" msgstr "" #, c-format msgid "Error reading key: \"%s\"" msgstr "" #, c-format msgid "\"%s\" assigned multiple times!" msgstr "" msgid "There were some errors when loading keys file, see log file?" msgstr "" msgid "Too many errors while reading keys file, aborting..." msgstr "" #, fuzzy, c-format msgid "FATAL ERROR: could not create %s: %s\n" msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" msgid "Welcome to Calcurse. Missing data files were created." msgstr "Welcome to Calcurse. Missing data files were created." msgid "Data files found. Data will be loaded now." msgstr "Data files found. Data will be loaded now." #, fuzzy msgid "The data were successfully exported" msgstr "The data files were successfully saved" msgid "unknown export type" msgstr "" msgid "wrong export mode" msgstr "" msgid "Enter the file name to import data from:" msgstr "" #, c-format msgid "Import process report: %04d lines read" msgstr "" msgid "unknown import type" msgstr "" msgid "FATAL ERROR: the input file cannot be accessed, Aborting..." msgstr "" #, fuzzy msgid "FATAL ERROR: wrong import mode" msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, c-format msgid "%d app" msgid_plural "%d apps" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d event" msgid_plural "%d events" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d todo" msgid_plural "%d todos" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d skipped" msgstr "" msgid "Some items could not be imported, see log file?" msgstr "" msgid "Warning: could not open temporary log file, Aborting..." msgstr "" msgid "Warning: could not create temporary log file, Aborting..." msgstr "" msgid "No log file to display!" msgstr "" #, c-format msgid "Warning: could not erase temporary log file %s, Aborting..." msgstr "" msgid "Invalid delay" msgstr "" #, c-format msgid "" "\n" "WARNING: it seems that another calcurse instance is already running.\n" "If this is not the case, please remove the following lock file: \n" "\"%s\"\n" "and restart calcurse.\n" msgstr "" msgid "Cancel" msgstr "" msgid "Select" msgstr "" msgid "Credits" msgstr "" msgid "Help" msgstr "Help" msgid "Quit" msgstr "Quit" msgid "Save" msgstr "Save" msgid "Reload" msgstr "" msgid "Copy" msgstr "" msgid "Paste" msgstr "" #, fuzzy msgid "Chg Win" msgstr "Chg View" msgid "Import" msgstr "" msgid "Export" msgstr "" #, fuzzy msgid "Go to" msgstr "Goto:\n" msgid "OtherCmd" msgstr "" msgid "Config" msgstr "Config" msgid "Redraw" msgstr "Redraw" #, fuzzy msgid "Add Appt" msgstr "Add Item" msgid "Add Todo" msgstr "" #, fuzzy msgid "-1 Day" msgstr "-/+1 Day" #, fuzzy msgid "+1 Day" msgstr "-/+1 Day" #, fuzzy msgid "-1 Week" msgstr "-/+1 Week" #, fuzzy msgid "+1 Week" msgstr "-/+1 Week" msgid "-1 Month" msgstr "" msgid "+1 Month" msgstr "" msgid "-1 Year" msgstr "" msgid "+1 Year" msgstr "" #, fuzzy msgid "Nxt View" msgstr "View" #, fuzzy msgid "Prv View" msgstr "View" msgid "Today" msgstr "" msgid "Command" msgstr "" msgid "Right" msgstr "" msgid "Left" msgstr "" #, fuzzy msgid "Down" msgstr "Up/Down" msgid "Up" msgstr "" #, fuzzy msgid "beg Week" msgstr "-/+1 Week" #, fuzzy msgid "end Week" msgstr "-/+1 Week" msgid "Add Item" msgstr "Add Item" msgid "Del Item" msgstr "Del Item" #, fuzzy msgid "Edit Itm" msgstr "Add Item" msgid "View" msgstr "View" msgid "Pipe" msgstr "" #, fuzzy msgid "Flag Itm" msgstr "Del Item" msgid "Repeat" msgstr "" #, fuzzy msgid "EditNote" msgstr "Add Item" #, fuzzy msgid "ViewNote" msgstr "View" msgid "Prio.+" msgstr "" msgid "Prio.-" msgstr "" msgid "" "#\n" "# Calcurse keys configuration file\n" "#\n" "# This file sets the keybindings used by Calcurse.\n" "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n" "# To assign a keybinding to an action, this file must contain a line\n" "# with the following syntax:\n" "#\n" "# ACTION KEY1 KEY2 ... KEYn\n" "#\n" "# Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn\n" "# will be pressed.\n" "#\n" "# To define bindings which use the CONTROL key, prefix the key with 'C-'.\n" "# The escape, space bar and horizontal Tab key can be specified using\n" "# the 'ESC', 'SPC' and 'TAB' keyword, respectively.\n" "# Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords.\n" "# Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END'\n" "# keywords.\n" "#\n" "# A description of what each ACTION keyword is used for is available\n" "# from calcurse online configuration menu.\n" msgstr "" #, fuzzy msgid "FATAL ERROR: could not create default keys file." msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy msgid "FATAL ERROR: key value out of bounds" msgstr "FATAL ERROR in update_windows: no window selected\n" msgid "General" msgstr "General" msgid "Layout" msgstr "Layout" msgid "Sidebar" msgstr "" msgid "Color" msgstr "Colour" msgid "Notify" msgstr "" msgid "Keys" msgstr "" #, fuzzy msgid "Unknown" msgstr "Colour" msgid "Cancel the ongoing action." msgstr "" msgid "Select the highlighted item." msgstr "" msgid "Print general information about calcurse's authors, license, etc." msgstr "" msgid "Display hints whenever some help screens are available." msgstr "" msgid "Exit from the current menu, or quit calcurse." msgstr "" msgid "Save calcurse data." msgstr "" msgid "Reload appointments and todo items." msgstr "" msgid "Copy the item that is currently selected." msgstr "" msgid "Paste an item at the current position." msgstr "" msgid "Select next panel in calcurse main screen." msgstr "" msgid "Import data from an external file." msgstr "" msgid "Export data to a new file format." msgstr "" msgid "Select the day to go to." msgstr "" msgid "Show next possible actions inside status bar." msgstr "" #, fuzzy msgid "Enter the configuration menu." msgstr "CalCurse %s | general options" msgid "Redraw calcurse's screen." msgstr "" msgid "Add an appointment, whichever panel is currently selected." msgstr "" msgid "Add a todo item, whichever panel is currently selected." msgstr "" msgid "" "Move to previous day in calendar, whichever panel is currently selected." msgstr "" msgid "Move to next day in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous week in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next week in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous month in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next month in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous year in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next year in calendar, whichever panel is currently selected." msgstr "" msgid "Scroll window down (e.g. when displaying text inside a popup window)." msgstr "" msgid "Scroll window up (e.g. when displaying text inside a popup window)." msgstr "" msgid "Go to today, whichever panel is selected." msgstr "" msgid "Enter command mode." msgstr "" msgid "Move to the right." msgstr "" msgid "Move to the left." msgstr "" msgid "Move down." msgstr "" msgid "Move up." msgstr "" msgid "" "Select the first day of the current week when inside the calendar panel." msgstr "" msgid "Select the last day of the current week when inside the calendar panel." msgstr "" msgid "Add an item to the currently selected panel." msgstr "" msgid "Delete the currently selected item." msgstr "" msgid "Edit the currently seleted item." msgstr "" msgid "Display the currently selected item inside a popup window." msgstr "" msgid "Flag the currently selected item as important." msgstr "" msgid "Repeat an item" msgstr "" msgid "Pipe the currently selected item to an external program." msgstr "" msgid "Attach (or edit if one exists) a note to the currently selected item" msgstr "" msgid "View the note attached to the currently selected item." msgstr "" msgid "Raise a task priority inside the todo panel." msgstr "" msgid "Lower a task priority inside the todo panel." msgstr "" #, fuzzy msgid "FATAL ERROR: null file pointer." msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, c-format msgid "When adding default key for \"%s\", \"%s\" was already assigned!" msgstr "" msgid "xmalloc: zero size" msgstr "" msgid "xmalloc: out of memory" msgstr "" msgid "xcalloc: zero size" msgstr "" msgid "xcalloc: overflow" msgstr "" msgid "xcalloc: out of memory" msgstr "" msgid "xrealloc: zero size" msgstr "" msgid "xrealloc: overflow" msgstr "" msgid "xrealloc: out of memory" msgstr "" msgid "could not allocate memory to store block info" msgstr "" #, fuzzy msgid "Block not found" msgstr "Appointment :" #, c-format msgid "overflow at %s" msgstr "" #, c-format msgid "dbg_free: null pointer at %s" msgstr "" #, c-format msgid "block seems already freed at %s" msgstr "" #, c-format msgid "corrupt block header at %s" msgstr "" #, c-format msgid "corrupt block end at %s, (end = %u, should be %d)" msgstr "" msgid "---==== MEMORY BLOCK ====----------------\n" msgstr "" #, c-format msgid " id: %u\n" msgstr "" #, c-format msgid " size: %u\n" msgstr "" #, c-format msgid " allocated in: %s\n" msgstr "" msgid "-----------------------------------------\n" msgstr "" msgid "+------------------------------+\n" msgstr "" msgid "| calcurse memory usage report |\n" msgstr "" #, c-format msgid " number of calls: %u\n" msgstr "" #, c-format msgid " allocated blocks: %u\n" msgstr "" #, c-format msgid " unfreed blocks: %u\n" msgstr "" #, c-format msgid "Warning: could not open %s, Aborting..." msgstr "" #, fuzzy msgid "error while launching command: could not fork" msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" msgid "error while launching command" msgstr "" #, fuzzy msgid "(if set to YES, notify-bar will be displayed)" msgstr "(if set to YES, progress bar will not be displayed when saving data)" msgid "(Format of the date to be displayed inside notify-bar)" msgstr "" msgid "(Format of the time to be displayed inside notify-bar)" msgstr "" msgid "" "(Warn user if an appointment is within next 'notify-bar_warning' seconds)" msgstr "" msgid "(Command used to notify user of an upcoming appointment)" msgstr "" msgid "(Notify all appointments instead of flagged ones only)" msgstr "" msgid "(Run in background to get notifications after exiting)" msgstr "" msgid "(Log activity when running in background)" msgstr "" msgid "Enter the time format (see 'man 3 strftime' for possible formats) " msgstr "" msgid "Enter the number of seconds (0 not to be warned before an appointment)" msgstr "" msgid "Enter the notification command " msgstr "" msgid "notification options" msgstr "" msgid "incoherent repetition type" msgstr "" msgid "unknown repetition type" msgstr "" msgid "unknown character" msgstr "" msgid "event not found" msgstr "" #, fuzzy msgid "appointment not found" msgstr "Appointment :" #, fuzzy msgid "syntax error in item date" msgstr "FATAL ERROR in load_app: syntax error in the item date\n" #, fuzzy msgid "date error in item exception" msgstr "FATAL ERROR in event_scan: date error in the event\n" #, fuzzy, c-format msgid "Could not remove calcurse lock file: %s\n" msgstr "Enter description :" #, c-format msgid "Error setting signal #%d : %s\n" msgstr "" msgid "no note attached" msgstr "" msgid "no such todo" msgstr "" msgid "todo not found" msgstr "" msgid "ERROR setting first day of week" msgstr "" msgid "The day you entered is not valid" msgstr "The day you entered is not valid" #, fuzzy, c-format msgid "Enter the day to go to [ENTER for today] : %s" msgstr "Enter the day to go to [ENTER for today] : dd/mm/yyyy" #, fuzzy msgid "Enter start time ([hh:mm] or [hhmm]):" msgstr "Enter end time ([hh:mm] or [h:mm]) or duration (in minutes) : " msgid "Press [Enter] to continue" msgstr "Press [Enter] to continue" #, fuzzy msgid "You entered an invalid time, should be [hh:mm] or [hhmm]" msgstr "You entered an invalid start time, should be [h:mm] or [hh:mm]" #, fuzzy msgid "Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):" msgstr "Enter end time ([hh:mm] or [h:mm]) or duration (in minutes) : " msgid "Invalid time: start time must be before end time!" msgstr "" #, fuzzy msgid "Enter the new item description:" msgstr "Enter description :" #, fuzzy msgid "Enter the new repetition type:" msgstr "Enter description :" msgid "(d)aily" msgstr "" msgid "(w)eekly" msgstr "" msgid "(m)onthly" msgstr "" msgid "(y)early" msgstr "" #, c-format msgid "(currently using %s)" msgstr "" msgid "[dwmy]" msgstr "" #, fuzzy msgid "The frequence you entered is not valid." msgstr "The day you entered is not valid" #, fuzzy msgid "The entered date is not valid." msgstr "The day you entered is not valid" #, fuzzy, c-format msgid "Possible formats are [%s] or '0' for an endless repetition." msgstr "Possible argument formats are : 'mm/dd/yyyy' or 'n'\n" msgid "Enter the new repetition frequence:" msgstr "" #, fuzzy, c-format msgid "Enter the new ending date: [%s] or '0'" msgstr "Possible argument formats are : 'mm/dd/yyyy' or 'n'\n" #, fuzzy msgid "Description" msgstr "Enter description :" msgid "Repetition" msgstr "" #, fuzzy msgid "Edit: " msgstr "Add Item" msgid "Start time" msgstr "" msgid "End time" msgstr "" msgid "Move" msgstr "" msgid "Pipe item to external command:" msgstr "" #, fuzzy msgid "Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:" msgstr "" "Enter start time ([hh:mm] or [h:mm]), leave blank for an all-day event : " #, fuzzy msgid "Enter description:" msgstr "Enter description :" #, fuzzy msgid "You entered an invalid start time, should be [hh:mm] or [hhmm]" msgstr "You entered an invalid start time, should be [h:mm] or [hh:mm]" #, fuzzy msgid "" "Invalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], " "[+xxxdxxhxxm] or [+mm]" msgstr "You entered an invalid end time, should be [h:mm] or [hh:mm] or [mm]" #, fuzzy msgid "Do you really want to delete this item?" msgstr "Do you really want to delete this item ?" msgid "This item is recurrent. Delete (a)ll occurences or just this (o)ne?" msgstr "" msgid "[ao]" msgstr "" msgid "This item has a note attached to it. Delete (i)tem or just its (n)ote?" msgstr "" msgid "[in]" msgstr "" #, fuzzy msgid "Enter the repetition type:" msgstr "Enter description :" msgid "Enter the repetition frequence:" msgstr "" #, fuzzy, c-format msgid "Enter the ending date: [%s] or '0' for an endless repetition" msgstr "Possible argument formats are : 'mm/dd/yyyy' or 'n'\n" #, fuzzy, c-format msgid "Possible formats are [%s] or '0' for an endless repetition" msgstr "Possible argument formats are : 'mm/dd/yyyy' or 'n'\n" msgid "This item is already a repeated one." msgstr "" msgid "Sorry, the date you entered is older than the item start time." msgstr "" msgid "wrong item type" msgstr "" #, fuzzy msgid "Enter the new TODO item:" msgstr "Enter the new ToDo item : " msgid "Enter the TODO priority [1 (highest) - 9 (lowest)]:" msgstr "" #, fuzzy msgid "Do you really want to delete this task?" msgstr "Do you really want to delete this task ?" msgid "This item has a note attached to it. Delete (t)odo or just its (n)ote?" msgstr "" msgid "[tn]" msgstr "" #, fuzzy msgid "Enter the new TODO description:" msgstr "Enter the new ToDo item : " msgid "TODO:" msgstr "" msgid "/!\\ INTERNAL ERROR /!\\" msgstr "" msgid "Please report the following bug:" msgstr "" msgid "[yn]" msgstr "" msgid "Press any key to continue..." msgstr "Press any key to continue..." msgid "failure in mktime" msgstr "" msgid "error in mktime" msgstr "" msgid "yes" msgstr "yes" msgid "no" msgstr "no" msgid "option not defined" msgstr "" #, c-format msgid "temporary file \"%s\" could not be created" msgstr "" #, c-format msgid "Error when closing file at %s" msgstr "" msgid "No note file found\n" msgstr "" msgid "January" msgstr "January" msgid "February" msgstr "February" msgid "March" msgstr "March" msgid "April" msgstr "April" msgid "May" msgstr "May" msgid "June" msgstr "June" msgid "July" msgstr "July" msgid "August" msgstr "August" msgid "September" msgstr "September" msgid "October" msgstr "October" msgid "November" msgstr "November" msgid "December" msgstr "December" msgid "Sun" msgstr "Sun" msgid "Mon" msgstr "Mon" msgid "Tue" msgstr "Tue" msgid "Wed" msgstr "Wed" msgid "Thu" msgstr "Thu" msgid "Fri" msgstr "Fri" msgid "Sat" msgstr "Sat" msgid "mm/dd/yyyy" msgstr "" msgid "dd/mm/yyyy" msgstr "" msgid "yyyy/mm/dd" msgstr "" msgid "yyyy-mm-dd" msgstr "" msgid "unknown panel" msgstr "" msgid "Usage: calcurse-upgrade [-h|-v|--config ]" msgstr "" msgid "unrecognized option:" msgstr "" #, fuzzy msgid "Configuration file not found:" msgstr "FATAL ERROR in fill_config_var: wrong configuration variable format.\n" #, fuzzy msgid "Pre-3.0.0 configuration file format detected..." msgstr "FATAL ERROR in fill_config_var: wrong configuration variable format.\n" #, fuzzy msgid "Create temporary backup of the configuration file..." msgstr "Failed to open config file" msgid "Old backup file found:" msgstr "" msgid "" "\n" "If a previous conversion did not complete, please try to restore your\n" "configuration from this backup and then remove the backup file." msgstr "" msgid "done" msgstr "" msgid "Old temporary file found:" msgstr "" msgid "" "\n" "If a previous conversion did not complete, please try to remove this file " "and\n" "start over with a backup of your old configuration file." msgstr "" msgid "Upgrade configuration directives..." msgstr "" msgid "Remove temporary backup..." msgstr "" #~ msgid "Argument to the '-d' flag is not valid\n" #~ msgstr "Argument to the '-d' flag is not valid\n" #, fuzzy #~ msgid "Possible argument format are: '%s' or 'n'\n" #~ msgstr "Possible argument formats are : 'mm/dd/yyyy' or 'n'\n" #, fuzzy #~ msgid "Argument is not valid\n" #~ msgstr "Argument to the '-d' flag is not valid\n" #, fuzzy #~ msgid "%s does not exist, create it now [y/n]? " #~ msgstr "%s does not exist, create it now [y or n] ? " #~ msgid "aborting...\n" #~ msgstr "aborting...\n" #~ msgid "%s successfully created\n" #~ msgstr "%s successfully created\n" #~ msgid "starting interactive mode...\n" #~ msgstr "starting interactive mode...\n" #~ msgid "Exit" #~ msgstr "Exit" #, fuzzy #~ msgid "No color" #~ msgstr "Colour" #, fuzzy #~ msgid "Add key" #~ msgstr "Add Item" #, fuzzy #~ msgid "Del key" #~ msgstr "Del Item" #, fuzzy #~ msgid "unknwon type" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #~ msgid "To do :" #~ msgstr "To do :" #, fuzzy #~ msgid "Calcurse help" #~ msgstr "CalCurse %s | help" #~ msgid " Welcome to Calcurse. This is the main help screen.\n" #~ msgstr " Welcome to Calcurse. This is the main help screen.\n" #, fuzzy #~ msgid "" #~ "Moving around: Press '%s' or '%s' to scroll text upward or downward\n" #~ " inside help screens, if necessary.\n" #~ "\n" #~ " Exit help: When finished, press '%s' to exit help and go back to\n" #~ " the main Calcurse screen.\n" #~ "\n" #~ " Help topic: At the bottom of this screen you can see a panel with\n" #~ " different fields, represented by a letter and a short\n" #~ " title. This panel contains all the available actions\n" #~ " you can perform when using Calcurse.\n" #~ " By pressing one of the letters appearing in this\n" #~ " panel, you will be shown a short description of the\n" #~ " corresponding action. At the top right side of the\n" #~ " description screen are indicated the user-defined key\n" #~ " bindings that lead to the action.\n" #~ "\n" #~ " Credits: Press '%s' for credits." #~ msgstr "" #~ " Moving around: Press CTRL-P or CTRL-N to scroll text upward or\n" #~ " downward inside help screens, if necessary.\n" #~ "\n" #~ " Exit help: When finished, press 'Q' to exit help and go back\n" #~ " to the main Calcurse screen.\n" #~ "\n" #~ " Help topic: At the bottom of this screen you can see a panel\n" #~ " with different fields, represented by a letter and\n" #~ " a short title. This panel contains all the available\n" #~ " actions you can perform when using Calcurse.\n" #~ " By pressing one of the letters appearing in this\n" #~ " panel, you will be shown a short description of the\n" #~ " corresponding action.\n" #~ "\n" #~ " Credits: Press '@' for credits." #, fuzzy #~ msgid "Save\n" #~ msgstr "Save:\n" #, fuzzy #~ msgid "" #~ "Save calcurse data.\n" #~ "Data are splitted into four different files which contain :\n" #~ "\n" #~ " / ~/.calcurse/conf -> user configuration\n" #~ " | (layout, color, general options)\n" #~ " | ~/.calcurse/apts -> data related to the appointments\n" #~ " | ~/.calcurse/todo -> data related to the todo list\n" #~ " \\ ~/.calcurse/keys -> user-defined key bindings\n" #~ "\n" #~ "In the config menu, you can choose to save the Calcurse data\n" #~ "automatically before quitting." #~ msgstr "" #~ "Pressing 'S' saves the Calcurse data.\n" #~ "\n" #~ "The data is splitted into three different files which contains :\n" #~ "\n" #~ " / ~/.calcurse/conf -> the user configuration\n" #~ " | (layout, colour, general options)\n" #~ " | ~/.calcurse/apts -> the data related to the appointments\n" #~ " \\ ~/.calcurse/todo -> the data related to the todo list\n" #~ "\n" #~ "In the config menu, you can choose to save the Calcurse data\n" #~ "automatically before quitting." #, fuzzy #~ msgid "Export\n" #~ msgstr "aborting...\n" #, fuzzy #~ msgid "Displacement keys\n" #~ msgstr "Displacement keys:\n" #, fuzzy #~ msgid "View\n" #~ msgstr "View:\n" #, fuzzy #~ msgid "" #~ "View the item you select in either the Todo or Appointment panel.\n" #~ "\n" #~ "This is usefull when an event description is longer than the available\n" #~ "space to display it. If that is the case, the description will be\n" #~ "shortened and its end replaced by '...'. To be able to read the entire\n" #~ "description, just press '%s' and a popup window will appear, containing\n" #~ "the whole event.\n" #~ "\n" #~ "Press any key to close the popup window and go back to the main\n" #~ "Calcurse screen." #~ msgstr "" #~ "Pressing 'V' allows you to view the item you select in either the ToDo\n" #~ "or Appointment panel.\n" #~ "\n" #~ "This is usefull when an event description is longer than the available\n" #~ "space to display it. If that is the case, the description will be\n" #~ "shortened and its end replaced by '...'. To be able to read the entire\n" #~ "description, just press 'V' and a popup window will appear, containing\n" #~ "the whole event.\n" #~ "\n" #~ "Press any key to close the popup window and go back to the main\n" #~ "Calcurse screen." #, fuzzy #~ msgid "Tab\n" #~ msgstr "Tab:\n" #, fuzzy #~ msgid "" #~ "Switch between panels.\n" #~ "The panel currently in use has its border colorized.\n" #~ "\n" #~ "Some actions are possible only if the right panel is selected.\n" #~ "For example, if you want to add a task in the TODO list, you need first\n" #~ "to press the '%s' key to get the TODO panel selected. Then you can\n" #~ "press '%s' to add your item.\n" #~ "\n" #~ "Notice that at the bottom of the screen the list of possible actions\n" #~ "change while pressing '%s', so you always know what action can be\n" #~ "performed on the selected panel." #~ msgstr "" #~ "Pressing 'Tab' allows you to switch between panels.\n" #~ "The panel currently in use has its border in colour.\n" #~ "\n" #~ "Some actions are possible only if the right panel is selected.\n" #~ "For example, if you want to add a task in the TODO list, you need first\n" #~ "to press the 'Tab' key to get the TODO panel selected. Then you can\n" #~ "press 'A' to add your item.\n" #~ "\n" #~ "Notice that at the bottom of the screen the list of possible actions\n" #~ "change while pressing 'Tab', so you always know what action can be\n" #~ "performed on the selected panel." #, fuzzy #~ msgid "Goto\n" #~ msgstr "Goto:\n" #, fuzzy #~ msgid "" #~ "Jump to a specific day in the calendar.\n" #~ "\n" #~ "Using this command, you do not need to travel to that day using\n" #~ "the displacement keys inside the calendar panel.\n" #~ "If you hit [ENTER] without specifying any date, Calcurse checks the\n" #~ "system current date and you will be taken to that date.\n" #~ "\n" #~ "Notice that pressing '%s', whatever panel is\n" #~ "selected, will select current day in the calendar." #~ msgstr "" #~ "Pressing 'G' allows you to jump to a specific day in the calendar.\n" #~ "\n" #~ "Using this command, you do not need to travel to that day using\n" #~ "the displacement keys inside the calendar panel.\n" #~ "If you hit [ENTER] without specifying any date, Calcurse checks the\n" #~ "system current date and you will be taken to that date." #, fuzzy #~ msgid "Delete\n" #~ msgstr "Delete:\n" #, fuzzy #~ msgid "" #~ "Delete an element in the ToDo or Appointment list.\n" #~ "\n" #~ "Depending on which panel is selected when you press the delete key,\n" #~ "the hilighted item of either the ToDo or Appointment list will be \n" #~ "removed from this list.\n" #~ "\n" #~ "If the item to be deleted is recurrent, you will be asked if you\n" #~ "wish to suppress all of the item occurences or just the one you\n" #~ "selected.\n" #~ "\n" #~ "If the general option 'confirm_delete' is set to 'YES', then you will\n" #~ "be asked for confirmation before deleting the selected event.\n" #~ "Do not forget to save the calendar data to retrieve the modifications\n" #~ "next time you launch Calcurse." #~ msgstr "" #~ "Pressing 'D' deletes an element in the ToDo or Appointment list.\n" #~ "\n" #~ "Depending on which panel is selected when you press the delete key,\n" #~ "the highlighted item of either the ToDo or Appointment list will be \n" #~ "removed from this list.\n" #~ "\n" #~ "If the general option 'confirm_delete' is set to 'YES', then you will\n" #~ "be asked for confirmation before deleting the selected event.\n" #~ "Do not forget to save the calendar data to retrieve the modifications\n" #~ "next time you launch Calcurse." #, fuzzy #~ msgid "Add\n" #~ msgstr "Add:\n" #, fuzzy #~ msgid "" #~ "Add an item in either the ToDo or Appointment list, depending on which\n" #~ "panel is selected when you press '%s'.\n" #~ "\n" #~ "To enter a new item in the TODO list, you will need first to enter the\n" #~ "description of this new item. Then you will be asked to specify the todo\n" #~ "priority. This priority is represented by a number going from 9 for the\n" #~ "lowest priority, to 1 for the highest one. It is still possible to\n" #~ "change the item priority afterwards, by using the '%s' and '%s' keys\n" #~ "inside the todo panel.\n" #~ "\n" #~ "If the APPOINTMENT panel is selected while pressing '%s', you will be\n" #~ "able to enter either a new appointment or a new all-day long event.\n" #~ "To enter a new event, press [ENTER] instead of the item start time, and\n" #~ "just fill in the event description.\n" #~ "To enter a new appointment to be added in the APPOINTMENT list, you\n" #~ "will need to enter successively the time at which the appointment\n" #~ "begins, the appointment length (either by specifying the end time in\n" #~ "[hh:mm] or the duration in [+hh:mm], [+xxdxxhxxm] or [+mm] format), \n" #~ "and the description of the event.\n" #~ "\n" #~ "The day at which occurs the event or appointment is the day currently\n" #~ "selected in the calendar, so you need to move to the desired day before\n" #~ "pressing '%s'.\n" #~ "\n" #~ "Notes:\n" #~ " o if an appointment lasts for such a long time that it continues\n" #~ " on the next days, this event will be indicated on all the\n" #~ " corresponding days, and the beginning or ending hour will be\n" #~ " replaced by '..' if the event does not begin or end on the day.\n" #~ " o if you only press [ENTER] at the APPOINTMENT or TODO event\n" #~ " description prompt, without any description, no item will be\n" #~ " added.\n" #~ " o do not forget to save the calendar data to retrieve the new\n" #~ " event next time you launch Calcurse." #~ msgstr "" #~ "Pressing 'A' allows you to add an item in either the ToDo or Appointment\n" #~ "list, depending on which panel is selected when you press 'A'.\n" #~ "\n" #~ "To enter a new item in the TODO list, you only need to enter the\n" #~ "description of this new item.\n" #~ "\n" #~ "If the APPOINTMENT panel is selected while pressing 'A', you will be\n" #~ "able to enter either a new appointment or a new all-day long event.\n" #~ "To enter a new event, press [ENTER] instead of the item start time, and\n" #~ "just fill in the event description.\n" #~ "To enter a new appointment to be added in the APPOINTMENT list, you\n" #~ "will need to enter successively the time at which the appointment\n" #~ "begins, the appointment length (either by specifying the duration in\n" #~ "minutes, or the end time in [hh:mm] or [h:mm] format), and the\n" #~ "description of the event.\n" #~ "\n" #~ "The day at which occurs the event or appointment is the day currently\n" #~ "selected in the calendar, so you need to move to the desired day before\n" #~ "pressing 'A'.\n" #~ "\n" #~ "Notes:\n" #~ " o if an appointment lasts for such a long time that it continues\n" #~ " into the next days, this event will be indicated on all the\n" #~ " corresponding days, and the beginning or ending hour will be\n" #~ " replaced by '..' if the event does not begin or end on the day.\n" #~ " o if you only press [ENTER] at the APPOINTMENT or TODO event\n" #~ " description prompt, without any description, no item will be\n" #~ " added.\n" #~ " o do not forget to save the calendar data to retrieve the new\n" #~ " event next time you launch Calcurse." #, fuzzy #~ msgid "Edit Item\n" #~ msgstr "Add Item" #, fuzzy #~ msgid "EditNote\n" #~ msgstr "Add Item" #, fuzzy #~ msgid "ViewNote\n" #~ msgstr "View:\n" #, fuzzy #~ msgid "Repeat\n" #~ msgstr "Redraw:\n" #, fuzzy #~ msgid "Flag Item\n" #~ msgstr "Add Item" #, fuzzy #~ msgid "Config\n" #~ msgstr "Config:\n" #, fuzzy #~ msgid "" #~ "Open the configuration submenu.\n" #~ "From this submenu, you can select between color, layout, notification\n" #~ "and general options, and you can also configure your keybindings.\n" #~ "\n" #~ "The color submenu lets you choose the color theme.\n" #~ "The layout submenu lets you choose the Calcurse screen layout, in other\n" #~ "words where to place the three different panels on the screen.\n" #~ "The general options submenu brings a screen with the different options\n" #~ "which modifies the way Calcurse interacts with the user.\n" #~ "The notify submenu allows you to change the notify-bar settings.\n" #~ "The keys submenu lets you define your own key bindings.\n" #~ "\n" #~ "Do not forget to save the calendar data to retrieve your configuration\n" #~ "next time you launch Calcurse." #~ msgstr "" #~ "Pressing 'C' leads to the configuration submenu, from which you can\n" #~ "select between colour, layout, and general options.\n" #~ "\n" #~ "The colour submenu lets you choose the colour theme.\n" #~ "\n" #~ "The layout submenu lets you choose the Calcurse screen layout, in other\n" #~ "words where to place the three different panels on the screen.\n" #~ "\n" #~ "The general options submenu brings a screen with the different options\n" #~ "which modifies the way Calcurse interacts with the user.\n" #~ "\n" #~ "Do not forget to save the calendar data to retrieve your configuration\n" #~ "next time you launch Calcurse." #~ msgid "Calcurse - text-based organizer" #~ msgstr "Calcurse - text-based organizer" #, fuzzy #~ msgid "" #~ "Enter end time ([hh:mm] or [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm] " #~ "or [+mm]) : " #~ msgstr "Enter end time ([hh:mm] or [h:mm]) or duration (in minutes) : " #, fuzzy #~ msgid "could not convert string" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #~ msgid "ToDo" #~ msgstr "ToDo" #~ msgid "Appointment" #~ msgstr "Appointment" #, fuzzy #~ msgid "missing colors in config file" #~ msgstr "Failed to open config file" #~ msgid "auto_save = " #~ msgstr "auto_save = " #, fuzzy #~ msgid "periodic_save = " #~ msgstr "auto_save = " #~ msgid "confirm_quit = " #~ msgstr "confirm_quit = " #~ msgid "confirm_delete = " #~ msgstr "confirm_delete = " #~ msgid "skip_system_dialogs = " #~ msgstr "skip_system_dialogues = " #~ msgid "skip_progress_bar = " #~ msgstr "skip_progress_bar = " #~ msgid "week_begins_on_monday = " #~ msgstr "week_begins_on_monday = " #~ msgid "" #~ "(if set to YES, monday is the first day of the week, else it is sunday)" #~ msgstr "" #~ "(if set to YES, monday is the first day of the week, otherwise it is " #~ "sunday)" #, fuzzy #~ msgid "Week" #~ msgstr "-/+1 Week" #, fuzzy #~ msgid "could not find any key file." #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "could not remove note" #~ msgstr "Enter description :" #~ msgid "Enter an option number to change its value [Q to quit] " #~ msgstr "Enter an option number to change its value [Q to quit] " #, fuzzy #~ msgid "CalCurse %s | notify-bar options" #~ msgstr "CalCurse %s | general options" #, fuzzy #~ msgid "" #~ "\n" #~ "Copyright (c) 2004-2008 Frederic Culot\n" #~ "\n" #~ "This program is free software; you can redistribute it and/or modify\n" #~ "it under the terms of the GNU General Public License as published by\n" #~ "the Free Software Foundation; either version 2 of the License, or\n" #~ "(at your option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful,\n" #~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" #~ "GNU General Public License for more details.\n" #~ "\n" #~ "\n" #~ "Send your feedback or comments to : misc@calcurse.org\n" #~ "Calcurse home page : http://calcurse.org" #~ msgstr "" #~ "Copyright (c) 2004-2006 Frederic Culot\n" #~ "\n" #~ "This program is free software; you can redistribute it and/or modify\n" #~ "it under the terms of the GNU General Public License as published by\n" #~ "the Free Software Foundation; either version 2 of the License, or\n" #~ "(at your option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful,\n" #~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" #~ "GNU General Public License for more details.\n" #~ "\n" #~ "\n" #~ "Send your feedback or comments to : misc@calcurse.org\n" #~ "Calcurse home page : http://calcurse.org" #~ msgid "Pick the desired layout on next screen [press ENTER]" #~ msgstr "Pick the desired layout on next screen [press ENTER]" #, fuzzy #~ msgid "('A'= Appointment panel, 'C'= calendar panel, 'T'= todo panel)" #~ msgstr "('A'= Appointment panel, 'c'= calendar panel, 't'= todo panel)" #, fuzzy #~ msgid "FATAL ERROR in apoint_delete: no such type\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #~ msgid "FATAL ERROR in apoint_scan: date error in the appointment\n" #~ msgstr "FATAL ERROR in apoint_scan: date error in the appointment\n" #, fuzzy #~ msgid "FATAL ERROR in apoint_get: no such item\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in apoint_delete_bynum: no such appointment" #~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n" #, fuzzy #~ msgid "FATAL ERROR in apoint_switch_notify: no such appointment" #~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n" #, fuzzy #~ msgid "FATAL ERROR in custom_load_color: wrong color number.\n" #~ msgstr "" #~ "FATAL ERROR in fill_config_var: wrong configuration variable format.\n" #, fuzzy #~ msgid "FATAL ERROR in custom_load_color: wrong color name.\n" #~ msgstr "FATAL ERROR in load_app: wrong format in the appointment or event\n" #, fuzzy #~ msgid "" #~ "FATAL ERROR in custom_load_color: wrong configuration variable format.\n" #~ msgstr "" #~ "FATAL ERROR in fill_config_var: wrong configuration variable format.\n" #, fuzzy #~ msgid "FATAL ERROR in custom_color_theme_name: unknown color\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in day_popup_item: unknown item type\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in event_get: no such item\n" #~ msgstr "FATAL ERROR in event_delete_bynum: no such event\n" #~ msgid "FATAL ERROR in event_delete_bynum: no such event\n" #~ msgstr "FATAL ERROR in event_delete_bynum: no such event\n" #, fuzzy #~ msgid "FATAL ERROR in foreach_date_dump: incoherent repetition type\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "" #~ "FATAL ERROR in pcal_export_recur_events: incoherent repetition type\n" #~ msgstr "FATAL ERROR in event_delete_bynum: no such event\n" #, fuzzy #~ msgid "" #~ "FATAL ERROR in pcal_export_recur_apoints: incoherent repetition type\n" #~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n" #, fuzzy #~ msgid "FATAL ERROR in io_export_data: wrong export mode\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in io_export_data: unknown export type\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in io_import_data: unknown import type" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in launch_cmd: could not launch user command" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in recur_def2char: unknown recur type\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in recur_char2def: unknown char\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in recur_event_scan: date error in the event\n" #~ msgstr "FATAL ERROR in event_scan: date error in the event\n" #, fuzzy #~ msgid "FATAL ERROR in recur_item_inday: unknown item type\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in recur_event_erase: no such event\n" #~ msgstr "FATAL ERROR in event_delete_bynum: no such event\n" #, fuzzy #~ msgid "FATAL ERROR in recur_apoint_erase: no such appointment\n" #~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n" #, fuzzy #~ msgid "FATAL ERROR in recur_repeat_item: wrong item type\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in recur_exc_scan: syntax error in the item date\n" #~ msgstr "FATAL ERROR in load_app: syntax error in the item date\n" #, fuzzy #~ msgid "FATAL ERROR in recur_get_apoint: no such item\n" #~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n" #, fuzzy #~ msgid "FATAL ERROR in recur_get_event: no such item\n" #~ msgstr "FATAL ERROR in event_delete_bynum: no such event\n" #, fuzzy #~ msgid "FATAL ERROR in recur_apoint_switch_notify: no such item\n" #~ msgstr "FATAL ERROR in apoint_delete_bynum: no such appointment\n" #, fuzzy #~ msgid "FATAL ERROR in todo_delete_note_bynum: no note attached\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in todo_delete_note_bynum: no such todo\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #~ msgid "FATAL ERROR in todo_delete_bynum: no such todo\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in todo_get_position: todo not found\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in todo_chg_priority: no such action\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #~ msgid "FATAL ERROR in date2sec: failure in mktime\n" #~ msgstr "FATAL ERROR in date2sec: failure in mktime\n" #, fuzzy #~ msgid "FATAL ERROR in date_sec_change: failure in mktime\n" #~ msgstr "FATAL ERROR in date2sec: failure in mktime\n" #, fuzzy #~ msgid "FATAL ERROR in other_status_page: unknown panel\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in mystrtol: number is out of range" #~ msgstr "FATAL ERROR in update_windows: no window selected\n" #~ msgid "option not defined - Problem in print_option_incolor()" #~ msgstr "option not defined - Problem in print_option_incolor()" #, fuzzy #~ msgid "FATAL ERROR in erase_note: could not remove note\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #, fuzzy #~ msgid "FATAL ERROR in wins_update: no window selected\n" #~ msgstr "FATAL ERROR in update_windows: no window selected\n" #, fuzzy #~ msgid "" #~ "You can use either 'H','J','K','L' or the arrow keys '<','v','^','>'\n" #~ "to move into the calendar.\n" #~ "\n" #~ "The following scheme explains how :\n" #~ "\n" #~ " move to previous week\n" #~ " K ^ \n" #~ " move to previous day H < > L move to next day\n" #~ " J v \n" #~ " move to next week\n" #~ "\n" #~ "Moreover, while inside the calendar panel, the '0' (zero) key moves\n" #~ "to the first day of the week, and the '$' key selects the last day of\n" #~ "the week.\n" #~ "\n" #~ "When the Appointment or ToDo panel is selected, the up and down keys\n" #~ "(respectively K or up arrow, and J or down arrow) allows you to select\n" #~ "an item from those lists." #~ msgstr "" #~ "You can use either 'H','J','K','L' or the arrow keys '<','v','^','>'\n" #~ "to move into the calendar.\n" #~ "\n" #~ "The following scheme explains how :\n" #~ "\n" #~ " move to previous week\n" #~ " K ^ \n" #~ " move to previous day H < > L move to next day\n" #~ " J v \n" #~ " move to next week\n" #~ "\n" #~ "When the Appointment or ToDo panel is selected, the up and down keys\n" #~ "(respectively K or up arrow, and J or down arrow) allows you to select\n" #~ "an item from those lists." #~ msgid "CalCurse %s | help" #~ msgstr "CalCurse %s | help" #, fuzzy #~ msgid "FATAL ERROR in wins_prop: property unknown\n" #~ msgstr "FATAL ERROR in todo_delete_bynum: no such todo\n" #~ msgid "" #~ "Please resize your terminal screen\n" #~ "(to at least 80x24),\n" #~ "and restart calcurse.\n" #~ msgstr "" #~ "Please resize your terminal screen\n" #~ "(to at least 80x24),\n" #~ "and restart calcurse.\n" #, fuzzy #~ msgid "FATAL ERROR in update_time_in_date: failure in mktime\n" #~ msgstr "FATAL ERROR in date2sec: failure in mktime\n" #~ msgid "Pick the number corresponding to the color scheme (Q to exit) :" #~ msgstr "Pick the number corresponding to the colour scheme (Q to exit) :" #~ msgid "([>0<] for black & white)" #~ msgstr "([>0<] for black & white)" #~ msgid "-- Press 'N' for next page --" #~ msgstr "-- Press 'N' for next page --" #~ msgid "-- Press 'P' for previous page --" #~ msgstr "-- Press 'P' for previous page --" #~ msgid " |Ac| |At| |cA| |tA|" #~ msgstr " |Ac| |At| |cA| |tA|" #~ msgid "[1]|At| [2]|Ac| [3]|tA| [4]|cA|" #~ msgstr "[1]|At| [2]|Ac| [3]|tA| [4]|cA|" #~ msgid "Redraw:\n" #~ msgstr "Redraw:\n" #, fuzzy #~ msgid "" #~ "Pressing CTRL-L redraws the Calcurse panels.\n" #~ "\n" #~ "You might want to use this function when you resize your terminal\n" #~ "screen for example, and you want Calcurse to take into account the new\n" #~ "size of the terminal.\n" #~ "\n" #~ "This function can also be useful when garbage appears in the display,\n" #~ "and you want to clean it." #~ msgstr "" #~ "Pressing 'R' redraws the Calcurse panels.\n" #~ "\n" #~ "You might want to use this function when you resize your terminal\n" #~ "screen for example, and you want Calcurse to take into account the new\n" #~ "size of the terminal.\n" #~ "\n" #~ "This function can also be useful when garbage appears in the display,\n" #~ "and you want to clear it." #~ msgid "GoTo" #~ msgstr "GoTo" calcurse-4.0.0/po/en.gmo0000644000175000017500000000647612472330423011776 00000000000000Þ•5ÄGlˆK‰5ÕB 9Nˆ ‘ž¤#«ÏØÞ*å"+/7<DIN U`fjnw™³ Ðñöý  Lg&k ’³(·àäé5í#&.`2K“ 5ß B 9X ’ › ¨ ® #µ Ù â é *ð  $ - 6 : B G O T Y ` k q u y ‚ Š ¤ ¾ Û ü      M% s &w ž ¿ (à ì ð õ 5ù / 2 :  .2( 03 !4 ,1')5$"% &*+ /-# For more information, type '?' from within Calcurse, or read the manpage. (if set to YES, automatic save is done when quitting)(if set to YES, confirmation is required before deleting an event)(if set to YES, confirmation is required before quitting)Add ItemAppointmentsAprilAugustCalcurse %s - text-based organizer CalendarColorConfigData files found. Data will be loaded now.DecemberDel ItemFebruaryFriGeneralHelpJanuaryJulyJuneLayoutLoading...MarchMayMonNovemberOctoberPress [ENTER] to continuePress [Enter] to continuePress any key to continue...Problems accessing data file ...QuitRedrawSatSaveSaving...SeptemberSorry, colors are not supported by your terminal (Press [ENTER] to continue)SunThe data files were successfully savedThe day you entered is not validThuTry 'calcurse -h' for more information. TueViewWedWelcome to Calcurse. Missing data files were created.noto do: yesProject-Id-Version: calcurse 1.4 Report-Msgid-Bugs-To: bugs@calcurse.org POT-Creation-Date: 2015-02-22 10:37+0100 PO-Revision-Date: 2006-07-03 00:05+0100 Last-Translator: Neil Williams Language-Team: English/GB Language: en MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For more information, type '?' from within Calcurse, or read the manpage. (if set to YES, automatic save is done when quitting)(if set to YES, confirmation is required before deleting an event)(if set to YES, confirmation is required before quitting)Add ItemAppointmentsAprilAugustCalcurse %s - text-based organizer CalendarColourConfigData files found. Data will be loaded now.DecemberDel ItemFebruaryFriGeneralHelpJanuaryJulyJuneLayoutLoading...MarchMayMonNovemberOctoberPress [ENTER] to continuePress [Enter] to continuePress any key to continue...Problems accessing data file ...QuitRedrawSatSaveSaving...SeptemberSorry, colours are not supported by your terminal (Press [ENTER] to continue)SunThe data files were successfully savedThe day you entered is not validThuTry 'calcurse -h' for more information. TueViewWedWelcome to Calcurse. Missing data files were created.noto do: yescalcurse-4.0.0/po/pt_BR.po0000644000175000017500000014024612472326722012237 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR calcurse Development Team # This file is distributed under the same license as the PACKAGE package. # # Translators: # Rafael Ferreira , 2012-2014 msgid "" msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: bugs@calcurse.org\n" "POT-Creation-Date: 2015-02-22 10:37+0100\n" "PO-Revision-Date: 2014-09-08 17:32+0000\n" "Last-Translator: Rafael Ferreira \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" "calcurse/language/pt_BR/)\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" msgid "null pointer" msgstr "ponteiro nulo" msgid "date error in appointment" msgstr "erro de data no agendamento" msgid "no such appointment" msgstr "agendamento inexistente" msgid "" "Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" " [-c] [-D] [-S] [--status]\n" " [--read-only]\n" msgstr "" "Uso: calcurse [-g|-h|-v] [-an] [-t[número]] [-i] [-x[formato]]\n" " [-d |] [-s[data]] [-r[número]]\n" " [-c] [-D] [-S] [--status]\n" " [--read-only]\n" msgid "Try 'calcurse -h' for more information.\n" msgstr "Tente \"calcurse -h\" para maiores informações.\n" #, fuzzy msgid "" "\n" "Copyright (c) 2004-2015 calcurse Development Team.\n" "This is free software; see the source for copying conditions.\n" msgstr "" "\n" "Copyright (c) 2004-2012 Equipe de Desenvolvimento do calcurse.\n" "Este é um software livre; veja o código fonte para condições de cópia.\n" #, c-format msgid "Calcurse %s - text-based organizer\n" msgstr "Calcurse %s - organizador baseado em texto\n" msgid "" "\n" "For more information, type '?' from within Calcurse, or read the manpage.\n" msgstr "" "\n" "Para maiores informações, pressione \"?\" estando dentro do Calcurse ou leia " "a página man.\n" msgid "Mail feature requests and suggestions to .\n" msgstr "" "Envie solicitações de recursos e sugestões para .\\n\n" msgid "Mail bug reports to .\n" msgstr "Envie relatórios de erros para .\\n\n" msgid "" "\n" "Miscellaneous:\n" " -h, --help\n" "\tprint this help and exit.\n" "\n" " -v, --version\n" "\tprint calcurse version and exit.\n" "\n" " --status\n" "\tdisplay the status of running instances of calcurse.\n" "\n" " --read-only\n" "\tDon't save configuration nor appointments/todos. Use with care.\n" "\n" "Files:\n" " -c , --calendar \n" "\tspecify the calendar to use (has precedence over '-D').\n" "\n" " -D , --directory \n" "\tspecify the data directory to use.\n" "\tIf not specified, the default directory is ~/.calcurse\n" "\n" "Non-interactive:\n" " -a, --appointment\n" " \tprint events and appointments for current day and exit.\n" "\n" " -d , --day \n" "\tprint events and appointments for or upcoming days and\n" "\texit. To specify both a starting date and a range, use the\n" "\t'--startday' and the '--range' option.\n" "\n" " -g, --gc\n" "\trun the garbage collector for note files and exit. \n" "\n" " -i , --import \n" "\timport the icalendar data contained in . \n" "\n" " -n, --next\n" "\tprint next appointment within upcoming 24 hours and exit. Also given\n" "\tis the remaining time before this next appointment.\n" "\n" " -l , --limit \n" "\tonly print information regarding the next items. \n" "\n" " -r[num], --range[=num]\n" "\tprint events and appointments for the [num] number of days\n" "\tand exit. If no [num] is given, a range of 1 day is considered.\n" "\n" " -s[date], --startday[=date]\n" "\tprint events and appointments from [date] and exit.\n" "\tIf no [date] is given, the current day is considered.\n" "\n" " -S, --search=\n" "\tsearch for the given regular expression within events, appointments,\n" "\tand todos description.\n" "\n" " -t[num], --todo[=num]\n" "\tprint todo list and exit. If the optional number [num] is given,\n" "\tthen only todos having a priority equal to [num] will be returned.\n" "\tThe priority number must be between 1 (highest) and 9 (lowest).\n" "\tIt is also possible to specify '0' for the priority, in which case\n" "\tonly completed tasks will be shown.\n" "\n" " -x[format], --export[=format]\n" "\texport user data to the specified format. Events, appointments and\n" "\ttodos are converted and echoed to stdout.\n" "\tTwo possible formats are available: 'ical' and 'pcal'.\n" "\tIf the optional argument format is not given, ical format is\n" "\tselected by default.\n" "\tnote: redirect standard output to export data to a file,\n" "\tby issuing a command such as: calcurse --export > calcurse.dat\n" msgstr "" "\n" "Miscelânea:\n" " -h, --help\n" "\texibe esta mensagem de ajuda e sai.\n" "\n" " -v, --version\n" " exibe a versão do calcurse e sai.\n" "\n" " --status\n" " mostra o status de instâncias em execução do calcurse.\n" "\n" " --read-only\n" " não salva configuração nem agendamentos/tarefas. Use com cuidado.\n" "\n" "Arquivos:\n" " -c , --calendar \n" " especifica o de calendário a ser usado (precede '-D').\n" "\n" " -D , --directory \n" " especifica o diretório de dados a ser usado.\n" " Se não for especificado, o diretório padrão do calcurse é ~/.calcurse\n" "\n" "Não-interativo:\n" " -a, --appointment\n" " exibe eventos e agendamentos para o dia atual e sai.\n" "\n" " -d , --day \n" " exibe eventos e agendamentos para dias próximos ou \n" " e sai. Para especificar ambas data de início e uma faixa, use a\n" " opção '--startday' e a '--range'.\n" "\n" " -g, --gc\n" " executa o coletor de lixo para arquivos de anotação e sai.\n" " \n" " -i , --import \n" " importa os dados de icalendar contidos no .\n" "\n" " -n, --next\n" " exibe próximo agendamento dentro das próximas 24 horas e sai. Também\n" " é dado o tempo restante até o próximo agendamento.\n" "\n" " -l , --limit \n" " exibe apenas informações relacionadas os próximos items.\n" "\n" " -r[número], --range[=número]\n" " exibe eventos e agendamentos para o número [número] de dias e sai. Se\n" " nenhum [número] for dado, uma faixa de 1 dia é considerada.\n" "\n" " -s[data], --startday[=data]\n" " exibe eventos e agendamentos da [data] e sai. Se nenhuma [data] for\n" " dada, o dia atual é considerado.\n" "\n" " -S, --search=\n" " pesquisa pela expressão regular dada dentro de descrições de eventos,\n" " agendamentos e tarefas.\n" "\n" " -t[número], --todo[=número]\n" " exibe lista de tarefas e sai. Se o número [número] opcional for dado,\n" " então somente tarefas contendo uma prioridade igual a [número] serão\n" " retornados. O número de prioridade deve estar entre 1 (maior) e 9\n" " (menor). Também é possível especificar '0' como prioridade, caso este\n" " em que somente tarefas finalizadas serão exibidas.\n" "\n" " -x[formato], --export[=formato]\n" " exporta dados do usuário para o formato especificado. Eventos,\n" " agendamentos e tarefas são convertidos e enviados para a stdout.\n" " Dois formatos estão disponíveis: 'ical' e 'pcal'. Se o argumento\n" " opcional de formato não for dado, o formato ical é selecionado por\n" " padrão.\n" " nota: redireciona a saída padrão (stdout) para exportar os dados para\n" " um arquivo, simplesmente executando um comando como este:\n" " calcurse --export > calcurse.dat\n" #, c-format msgid "" "Error: both calcurse (pid: %d) and its daemon (pid: %d)\n" "seem to be running at the same time!\n" "Please check manually and restart calcurse.\n" msgstr "" "Erro: ambos calcurse (pid: %d) e seu daemon (pid: %d)\n" "parecem estar em execução simultaneamente!\n" "Favor verifique manualmente e reinicie calcurse.\n" #, c-format msgid "calcurse is running (pid %d)\n" msgstr "calcurse está em execução (pid %d)\n" #, c-format msgid "calcurse is running in background (pid %d)\n" msgstr "calcurse está em execução em plano de fundo (pid %d)\n" msgid "calcurse is not running\n" msgstr "calcurse não está em execução\n" msgid "completed tasks:\n" msgstr "tarefas finalizadas:\n" msgid "to do:\n" msgstr "tarefa:\n" msgid "next appointment:\n" msgstr "próximo agendamento:\n" #, fuzzy, c-format msgid "invalid date: %s" msgstr "Atraso inválido" #, c-format msgid "invalid range: %s" msgstr "" #, c-format msgid "invalid priority: %s" msgstr "" #, c-format msgid "invalid export format: %s" msgstr "" msgid "invalid filter mask" msgstr "" #, fuzzy msgid "cannot handle more than one regular expression" msgstr "Não é possível utilizar mais de um expressão regular." #, fuzzy, c-format msgid "could not compile regular expression: %s" msgstr "Não foi possível compilar expressão regular." #, c-format msgid "invalid date range: %s" msgstr "" msgid "invalid argument combination" msgstr "" msgid "cannot specify a range and an end date" msgstr "" msgid "Export to (i)cal or (p)cal format?" msgstr "Exportar para o formato (i)cal ou para (p)cal?" msgid "[ip]" msgstr "[ip]" msgid "Do you really want to quit?" msgstr "Tem certeza que deseja sair?" msgid "Command:" msgstr "Comando:" #, c-format msgid "Help topic does not exist: %s" msgstr "Tópico de ajuda não existe: %s" #, c-format msgid "No such command: %s" msgstr "Comando inexistente: %s" msgid "unknown color" msgstr "cor desconhecida" msgid "failed to open configuration file" msgstr "falha na abertura do arquivo de configuração" #, c-format msgid "invalid configuration directive: \"%s\"" msgstr "diretiva de configuração inválida: \"%s\"" msgid "" "Pre-3.0.0 configuration file format detected, please upgrade running " "`calcurse-upgrade`." msgstr "" "Formato de arquivo de configuração pré-3.0.0 detectado. Favor, atualize com " "\"calcurse-upgrade\"." #, c-format msgid "configuration variable unknown: \"%s\"" msgstr "variável de configuração desconhecida: \"%s\"" #, c-format msgid "wrong configuration variable format for \"%s\"" msgstr "formato incorreto de variável de configuração para \"%s\"" msgid "layout configuration" msgstr "Configuração de layout" msgid "Foreground" msgstr "Primeiro plano" msgid "Background" msgstr "Plano de fundo" msgid "(terminal's default)" msgstr "(padrão do terminal)" msgid "color theme" msgstr "Tema de Cor" msgid "(if set to YES, compact panels are used)" msgstr "(se definido para SIM, painéis compactos são usados) " msgid "Calendar" msgstr "Calendário" msgid "Appointments" msgstr "Agendamentos" msgid "TODO" msgstr "TAREFA" msgid "(specifies the panel that is selected by default)" msgstr "(especifica o painel que fica selecionado por padrão)" msgid "(if set to YES, automatic save is done when quitting)" msgstr "" "(se definida como SIM, salvamento automático será feito quando estiver de " "saída)" msgid "(run the garbage collector when quitting)" msgstr "(executa o coletor de lixo ao sair)" msgid "(if not null, automatically save data every 'periodic_save' minutes)" msgstr "" "(se não nulo, automaticamente salva os dados a cada \"periodic_save\" " "minutos)" msgid "(if set to YES, confirmation is required before quitting)" msgstr "(se definida como SIM, uma confirmação será necessária antes de sair)" msgid "(if set to YES, confirmation is required before deleting an event)" msgstr "" "(se definida como SIM, uma confirmação será necessária antes da exclusão de " "um evento)" msgid "(if set to YES, messages about loaded and saved data will be displayed)" msgstr "" "(se definida como SIM, mensagens sobre dados carregados e salvados serão " "exibidos)" msgid "(if set to YES, progress bar will be displayed when saving data)" msgstr "" "(se definida como SIM, barra de progresso será exibida durante o salvamento " "dos dados)" msgid "Monday" msgstr "Segunda-feira" msgid "Sunday" msgstr "Domingo" msgid "(specifies the first day of week in the calendar view)" msgstr "(especifica o primeiro dia da semana na visão de calendário)" msgid "(Format of the date to be displayed in non-interactive mode)" msgstr "(formato da data a ser exibido no modo não interativo)" msgid "(Format to be used when entering a date: " msgstr "(formato a ser usado ao informar uma data: " msgid "Enter an option number to change its value" msgstr "Entre com o número de uma opção para alterar seu valor" msgid "(Press '^P' or '^N' to move up or down, 'Q' to quit)" msgstr "" "(Pressione \"^P\" ou \"^N\" para mover para cima ou para baixo, \"Q\" para " "sair)" msgid "Enter the date format (see 'man 3 strftime' for possible formats) " msgstr "" "Entre com o formato da data (veja \"man 3 strftime\" para formatos " "possíveis) " msgid "Enter the date format: " msgstr "Entre com formato da data: " msgid "Enter the delay, in minutes, between automatic saves (0 to disable) " msgstr "" "Entre com a distância, em minutos, entre salvamentos (0 = desabilitar) " msgid "general options" msgstr "Opções Gerais" msgid "Undefined option!" msgstr "Opção indefinida!" msgid "undefined" msgstr "indefinida" msgid "keys configuration" msgstr "Configuração das Teclas" msgid "Press the key you want to assign to:" msgstr "Pressione a tecla que você quer designar para:" msgid "This key is not yet recognized by calcurse, please choose another one." msgstr "Essa tecla não é reconhecida ainda pelo calcurse, favor escolha outra." #, c-format msgid "This key is already in use for %s, please choose another one." msgstr "Essa tecla está sendo usada por %s, favor escolha outra." msgid "Some actions do not have any associated key bindings!" msgstr "Algumas ações não têm teclas de atalho associadas!" msgid "" "Sorry, colors are not supported by your terminal\n" "(Press [ENTER] to continue)" msgstr "" "Sinto muito, cores não são suportadas em seu terminal\n" "(Pressione [Enter] para continuar)" msgid "unknown item type" msgstr "tipo de item desconhecido" msgid "Event:" msgstr "Evento:" msgid "Appointment:" msgstr "Agendamento:" #, c-format msgid "Could not stop daemon properly: %s\n" msgstr "Não foi possível parar o daemon corretamente: %s\n" #, c-format msgid "terminated at %s with signal %d\n" msgstr "Terminado em %s com sinal %d\n" #, c-format msgid "Could not remove daemon lock file: %s\n" msgstr "Não foi possível excluir o arquivo de trava do daemon: %s\n" #, c-format msgid "Could not fork: %s\n" msgstr "Não foi possível fazer bifurcação: %s\n" #, c-format msgid "Could not detach from the controlling terminal: %s\n" msgstr "Não foi possível desanexar do terminal de controle: %s\n" #, c-format msgid "Could not change working directory: %s\n" msgstr "Não foi possível alterar o diretório de trabalho: %s\n" msgid "Cannot daemonize, aborting\n" msgstr "Não foi possível executar em daemon, abortando\n" msgid "Could not set lock file\n" msgstr "Não foi possível definir arquivo de trava\n" #, c-format msgid "Could not access \"%s\": %s\n" msgstr "Não foi possível acessar \"%s\": %s\n" #, c-format msgid "started at %s\n" msgstr "Iniciado em %s\n" msgid "error loading next appointment\n" msgstr "erro no carregamento do agendamento seguinte\n" #, c-format msgid "launching notification at %s for: \"%s\"\n" msgstr "Iniciando notificação em %s para : \"%s\"\n" msgid "error while sending notification\n" msgstr "Erro no envio de notificação\n" #, c-format msgid "sleeping at %s for %d second\n" msgid_plural "sleeping at %s for %d seconds\n" msgstr[0] "Dormir em %s por %d segundo\n" msgstr[1] "Dormir em %s por %d segundos\n" #, c-format msgid "awakened at %s\n" msgstr "Acordou em %s\n" #, c-format msgid "Could not stop calcurse daemon: %s\n" msgstr "Não foi possível parar o daemon do calcurse: %s\n" msgid "date error in event" msgstr "erro na data em evento" msgid "date error in the event\n" msgstr "erro de data no evento\n" msgid "Internal error: line too long" msgstr "Erro interno: linha muito comprida" msgid "out of memory" msgstr "memória insuficiente" msgid "unknown ical type" msgstr "tipo de ical desconhecido" msgid "recurrence frequence not found." msgstr "frequência de recorrência não encontrada." msgid "recurrence frequence not recognized." msgstr "frequência de recorrência não reconhecida." msgid "recurrence rule malformed." msgstr "regra de recorrência mal-formulada." msgid "recurrence exception dates malformed." msgstr "Exceção de datas de recorrência mal-formulada." msgid "could not get entire item description." msgstr "não foi possível adquirir a descrição completa do item." msgid "description malformed." msgstr "descrição mal-formulada." msgid "appointment has no start time." msgstr "agendamento não tem hora de início." msgid "could not compute duration (no end time)." msgstr "não foi possível computar duração (falta hora de término)." msgid "item has a negative duration." msgstr "item tem uma duração negativa." msgid "event date is not defined." msgstr "data de evento não está definida." msgid "item could not be identified." msgstr "item não pôde ser identificado." msgid "could not retrieve item summary." msgstr "não foi possível adquirir sumário do item." msgid "could not retrieve event start time." msgstr "não foi possível adquirir hora de início do evento." msgid "could not retrieve event end time." msgstr "não foi possível adquirir hora de término do evento." msgid "item duration malformed." msgstr "duração de item mal-formulada." msgid "The ical file seems to be malformed. The end of item was not found." msgstr "" "O arquivo ical parece estar mal-formulada. O fim do item não foi encontrado." msgid "item priority is not acceptable (must be between 1 and 9)." msgstr "prioridade de item não é aceitável (deve ser entre 1 e 9)." msgid "Warning: ical header malformed or wrong version number. Aborting..." msgstr "" "Aviso: cabeçalho ical mal-formulado ou número de versão errado. Abortando..." msgid "Saving..." msgstr "Salvando..." msgid "Loading..." msgstr "Carregando..." msgid "Exporting..." msgstr "Exportando..." msgid "Internal error while displaying progress bar" msgstr "Erro interno enquanto exibia barra de progresso" msgid "Choose the file used to export calcurse data:" msgstr "Escolha o arquivo para o qual serão exportados os dados do calcurse:" msgid "The file cannot be accessed, please enter another file name." msgstr "" "O arquivo não pode ser acessado. Por favor, insira outro nome de arquivo." msgid "Press [ENTER] to continue." msgstr "Pressione [ENTER] para continuar." #, c-format msgid "Failed to open \"%s\", - %s\n" msgstr "Falha na abertura de \"%s\", - %s\n" msgid "Failed to build message\n" msgstr "Falha na criação da mensagem\n" #, c-format msgid "Failed to print message \"%s\"\n" msgstr "Falha na exibição da mensagem \"%s\"\n" #, c-format msgid "Failed to close \"%s\" - %s\n" msgstr "Falha no fechamento de \"%s\" - %s\n" #, fuzzy, c-format msgid "%s does not exist" msgstr "Tópico de ajuda não existe: %s" msgid "Problems accessing data file ..." msgstr "Problemas no acesso do arquivo de dados..." msgid "The data files were successfully saved" msgstr "Os arquivos de dados foram salvos com sucesso" msgid "Press [ENTER] to continue" msgstr "Pressione [ENTER] para continuar" msgid "failed to open appointment file" msgstr "falha na abertura do arquivo de agendamento" msgid "syntax error in the item date" msgstr "erro de sintaxe no item data" msgid "no event nor appointment found" msgstr "nenhum evento nem agendamento encontrado" msgid "syntax error in item time or duration" msgstr "erro de sintaxe no horário ou duração do item" msgid "syntax error in item identifier" msgstr "erro de sintaxe no identificador do item" msgid "wrong format in the appointment or event" msgstr "formato errado no agendamento ou evento" msgid "syntax error in item repetition" msgstr "erro de sintaxe na repetição do item" msgid "failed to open todo file" msgstr "falha na abertura do arquivo de tarefas" msgid "The data files were reloaded successfully" msgstr "Os arquivos de dados foram recarregados com sucesso" msgid "There are unsaved modifications:" msgstr "Há modificações não salvas:" msgid "(d)iscard" msgstr "(d)escartar" msgid "(m)erge" msgstr "(m)esclar" msgid "(k)eep and cancel" msgstr "manter e (c)cancelar" msgid "[dmk]" msgstr "[dmc]" msgid "failed to open key file" msgstr "falha na abertura do arquivo de teclas" msgid "" "\n" "Too many errors while reading configuration file!\n" "Please backup your keys file, remove it from directory, and launch calcurse " "again.\n" msgstr "" "\n" "Muitos erros de leitura do arquivo de configuração!\n" "Favor faça backup de seus arquivos de teclas, exclua-o de seu diretório e " "carregue calcurse novamente.\n" msgid "Could not read key label" msgstr "Não foi possível ler o rótulo de tecla" msgid "Key label not recognized" msgstr "Rótulo de tecla não reconhecida" #, c-format msgid "Error reading key: \"%s\"" msgstr "Erro na leitura da tecla: \"%s\"" #, c-format msgid "\"%s\" assigned multiple times!" msgstr "\"%s\" alocada múltiplas vezes!" msgid "There were some errors when loading keys file, see log file?" msgstr "" "Ocorreram alguns erros ao carregar o arquivo de teclas; ver arquivo de log?" msgid "Too many errors while reading keys file, aborting..." msgstr "Erros demais na leitura do arquivo de chaves, abortando..." #, c-format msgid "FATAL ERROR: could not create %s: %s\n" msgstr "ERRO FATAL: não foi possível criar %s: %s\n" msgid "Welcome to Calcurse. Missing data files were created." msgstr "" "Bem-vindo ao Calcurse. Arquivos de dados não encontrados foram criados." msgid "Data files found. Data will be loaded now." msgstr "Arquivos de dados encontrados. Os dados serão carregados agora." msgid "The data were successfully exported" msgstr "Os dados foram exportados com sucesso" msgid "unknown export type" msgstr "tipo de exportação desconhecido" msgid "wrong export mode" msgstr "modo de exportação errado" msgid "Enter the file name to import data from:" msgstr "Entre com o nome do arquivo de onde serão importados os dados:" #, c-format msgid "Import process report: %04d lines read" msgstr "relatório do processo de importação: %04d linhas lidas" msgid "unknown import type" msgstr "tipo de importação desconhecida" msgid "FATAL ERROR: the input file cannot be accessed, Aborting..." msgstr "ERRO FATAL: o arquivo de entrada não pode ser acessado. Abortando..." msgid "FATAL ERROR: wrong import mode" msgstr "ERRO FATAL: modo de importação errado" #, c-format msgid "%d app" msgid_plural "%d apps" msgstr[0] "%d agend." msgstr[1] "%d agends." #, c-format msgid "%d event" msgid_plural "%d events" msgstr[0] "%d evento" msgstr[1] "%d eventos" #, c-format msgid "%d todo" msgid_plural "%d todos" msgstr[0] "%d tarefa" msgstr[1] "%d tarefas" #, c-format msgid "%d skipped" msgstr "%d ignorado(s)" msgid "Some items could not be imported, see log file?" msgstr "Alguns itens não puderam ser importados; ver arquivo de log?" msgid "Warning: could not open temporary log file, Aborting..." msgstr "" "Aviso: não foi possível abrir o arquivo temporário de log. Abortando..." msgid "Warning: could not create temporary log file, Aborting..." msgstr "Aviso: não foi possível criar arquivo temporário de log. Abortando..." msgid "No log file to display!" msgstr "Nenhum arquivo de log para ser exibido!" #, c-format msgid "Warning: could not erase temporary log file %s, Aborting..." msgstr "" "Aviso: não foi possível apagar o arquivo temporário de log %s. Abortando..." msgid "Invalid delay" msgstr "Atraso inválido" #, c-format msgid "" "\n" "WARNING: it seems that another calcurse instance is already running.\n" "If this is not the case, please remove the following lock file: \n" "\"%s\"\n" "and restart calcurse.\n" msgstr "" "\n" "AVISO: para que outra instância de calcurse já está em execução.\n" "Se este não é o caso, favor excluir o seguinte arquivo de trava: \n" "\"%s\"\n" "e reinicie calcurse.\n" msgid "Cancel" msgstr "Cancelar" msgid "Select" msgstr "Selecionar" msgid "Credits" msgstr "Créditos" msgid "Help" msgstr "Ajuda" msgid "Quit" msgstr "Sair" msgid "Save" msgstr "Salvar" msgid "Reload" msgstr "Recarregar" msgid "Copy" msgstr "Copiar" msgid "Paste" msgstr "Colar" msgid "Chg Win" msgstr "MudarJan" msgid "Import" msgstr "Importar" msgid "Export" msgstr "Exportar" msgid "Go to" msgstr "IrPara" msgid "OtherCmd" msgstr "OutroCmd" msgid "Config" msgstr "Config" msgid "Redraw" msgstr "Redesenhar" msgid "Add Appt" msgstr "AdicAgend" msgid "Add Todo" msgstr "AdiTarefa" msgid "-1 Day" msgstr "-1 Dia" msgid "+1 Day" msgstr "+1 Dia" msgid "-1 Week" msgstr "-1 Semana" msgid "+1 Week" msgstr "+1 Semana" msgid "-1 Month" msgstr "-1 Mês" msgid "+1 Month" msgstr "+1 Mês" msgid "-1 Year" msgstr "-1 Ano" msgid "+1 Year" msgstr "+1 Ano" msgid "Nxt View" msgstr "Visão Seg" msgid "Prv View" msgstr "Visão Ant" msgid "Today" msgstr "Hoje" msgid "Command" msgstr "Comando" msgid "Right" msgstr "Direita" msgid "Left" msgstr "Esquerda" msgid "Down" msgstr "Baixo" msgid "Up" msgstr "Cima" msgid "beg Week" msgstr "IniSemana" msgid "end Week" msgstr "FimSemana" msgid "Add Item" msgstr "AdicItem" msgid "Del Item" msgstr "ExclItem" msgid "Edit Itm" msgstr "EditItem" msgid "View" msgstr "Ver" msgid "Pipe" msgstr "Redirec." msgid "Flag Itm" msgstr "SinalItem" msgid "Repeat" msgstr "Repetir" msgid "EditNote" msgstr "EditNota" msgid "ViewNote" msgstr "VerNota" msgid "Prio.+" msgstr "Prio.+" msgid "Prio.-" msgstr "Prio.-" msgid "" "#\n" "# Calcurse keys configuration file\n" "#\n" "# This file sets the keybindings used by Calcurse.\n" "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n" "# To assign a keybinding to an action, this file must contain a line\n" "# with the following syntax:\n" "#\n" "# ACTION KEY1 KEY2 ... KEYn\n" "#\n" "# Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn\n" "# will be pressed.\n" "#\n" "# To define bindings which use the CONTROL key, prefix the key with 'C-'.\n" "# The escape, space bar and horizontal Tab key can be specified using\n" "# the 'ESC', 'SPC' and 'TAB' keyword, respectively.\n" "# Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords.\n" "# Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END'\n" "# keywords.\n" "#\n" "# A description of what each ACTION keyword is used for is available\n" "# from calcurse online configuration menu.\n" msgstr "" "#\n" "# Calcurse - arquivo de configuração de teclas\n" "#\n" "# Este arquivo define as teclas de atalhos (keybindings) usadas pelo " "Calcurse.\n" "# Linhas iniciadas com \"#\" são comentários, e são ignoradas pelo " "Calcurse.\n" "# Para designar uma tecla de atalho para uma ação, o arquivo deve conter " "uma\n" "# linha com a seguinte sintaxe:\n" "#\n" "# AÇÃO TECLA1 TECLA2 ... TECLAn\n" "#\n" "# Onde AÇÃO é o que será executado quando TECLA1, TECLA2, ..., ou TECLAn\n" "# for pressionada.\n" "#\n" "# Para definir atalhos que usem a tecla CONTROL, insira antes 'C-' na " "tecla.\n" "# Para as teclas ESC, barra de espaço e Tab horizontal, podem ser# " "especificadas as palavras-chave 'ESC', 'SPC' e 'TAB', respectivamente.\n" "# Teclas de setas podem também ser especificadas com as palavras-chave UP, " "DWN,# LFT e RGT.# Por último, teclas Home e End podem ser designadas usando " "as palavras-chave\n" "# 'KEY_HOME' e 'KEY_END'.#\n" "# Uma descrição do como cada palavra-chave de AÇÃO é está disponível no " "menu\n" "# de configuração online do calcurse.\n" msgid "FATAL ERROR: could not create default keys file." msgstr "ERRO FATAL: não foi possível criar arquivo de teclas padrões." msgid "FATAL ERROR: key value out of bounds" msgstr "ERRO FATAL: valor da tecla fora dos limites" msgid "General" msgstr "Geral" msgid "Layout" msgstr "Layout" msgid "Sidebar" msgstr "BarraLateral" msgid "Color" msgstr "Cor" msgid "Notify" msgstr "Notificação" msgid "Keys" msgstr "Teclas" msgid "Unknown" msgstr "Desconhecido" msgid "Cancel the ongoing action." msgstr "Cancela a ação em andamento." msgid "Select the highlighted item." msgstr "Seleciona o item realçado." msgid "Print general information about calcurse's authors, license, etc." msgstr "Imprime informações gerais sobre os autores do calcurse, licença, etc." msgid "Display hints whenever some help screens are available." msgstr "Exibe dicas quando algumas telas de ajuda estiverem disponíveis." msgid "Exit from the current menu, or quit calcurse." msgstr "Sai deste menu, ou sai do calcurse." msgid "Save calcurse data." msgstr "Salva dados do calcurse." msgid "Reload appointments and todo items." msgstr "Recarrega agendamentos e lista de tarefas." msgid "Copy the item that is currently selected." msgstr "Copia o item que está selecionado no momento." msgid "Paste an item at the current position." msgstr "Cola um item na posição atual." msgid "Select next panel in calcurse main screen." msgstr "Seleciona o próximo painel na tela principal do calcurse." msgid "Import data from an external file." msgstr "Importa dados a partir de um arquivo externo." msgid "Export data to a new file format." msgstr "Exporta dados para um novo formato de arquivo." msgid "Select the day to go to." msgstr "Seleciona o dia para ir para." msgid "Show next possible actions inside status bar." msgstr "Mostra próximas ações possíveis dentro da barra de status." msgid "Enter the configuration menu." msgstr "Entra no menu de configurações." msgid "Redraw calcurse's screen." msgstr "Redesenha a tela do calcurse." msgid "Add an appointment, whichever panel is currently selected." msgstr "" "Adiciona um agendamento, seja qual for o painel atualmente selecionado." msgid "Add a todo item, whichever panel is currently selected." msgstr "" "Adiciona um item de tarefa, seja qual for o painel atualmente selecionado." msgid "" "Move to previous day in calendar, whichever panel is currently selected." msgstr "" "Move para o dia anterior no calendário, seja qual for o painel atualmente " "selecionado." msgid "Move to next day in calendar, whichever panel is currently selected." msgstr "" "Move para o dia seguinte no calendário, seja qual for o painel atualmente " "selecionado." msgid "" "Move to previous week in calendar, whichever panel is currently selected" msgstr "" "Move para a semana anterior no calendário, seja qual for o painel atualmente " "selecionado." msgid "Move to next week in calendar, whichever panel is currently selected." msgstr "" "Move para a semana seguinte no calendário, seja qual for o painel atualmente " "selecionado." msgid "" "Move to previous month in calendar, whichever panel is currently selected" msgstr "" "Move para o mês anterior no calendário, seja qual for o painel atualmente " "selecionado." msgid "Move to next month in calendar, whichever panel is currently selected." msgstr "" "Move para o mês seguinte no calendário, seja qual for o painel atualmente " "selecionado." msgid "" "Move to previous year in calendar, whichever panel is currently selected" msgstr "" "Move para o ano anterior no calendário, seja qual for o painel atualmente " "selecionado." msgid "Move to next year in calendar, whichever panel is currently selected." msgstr "" "Move para o ano seguinte no calendário, seja qual for o painel atualmente " "selecionado." msgid "Scroll window down (e.g. when displaying text inside a popup window)." msgstr "" "Rola a tela para baixo (ex: quando exibindo texto em uma janela pop-up)." msgid "Scroll window up (e.g. when displaying text inside a popup window)." msgstr "" "Rola a tela para cima (ex: quando exibindo texto em uma janela pop-up)." msgid "Go to today, whichever panel is selected." msgstr "Ir para hoje, seja qual for o painel selecionado." msgid "Enter command mode." msgstr "Entra no modo de comando." msgid "Move to the right." msgstr "Move para a direita." msgid "Move to the left." msgstr "Move para a esquerda." msgid "Move down." msgstr "Move para baixo." msgid "Move up." msgstr "Move para cima." msgid "" "Select the first day of the current week when inside the calendar panel." msgstr "" "Seleciona o primeiro dia da semana atual quando se está dentro do painel do " "calendário." msgid "Select the last day of the current week when inside the calendar panel." msgstr "" "Seleciona o último dia da semana atual quando se está dentro do painel do " "calendário." msgid "Add an item to the currently selected panel." msgstr "Adiciona um item para o painel atualmente selecionado." msgid "Delete the currently selected item." msgstr "Exclui o item atualmente selecionado." msgid "Edit the currently seleted item." msgstr "Edita o item atualmente selecionado." msgid "Display the currently selected item inside a popup window." msgstr "Exibe o item atualmente selecionado em uma janela pop-up." msgid "Flag the currently selected item as important." msgstr "Sinaliza o item atualmente selecionado como importante." msgid "Repeat an item" msgstr "Repete um item" msgid "Pipe the currently selected item to an external program." msgstr "Redireciona o item selecionado para um programa externo." msgid "Attach (or edit if one exists) a note to the currently selected item" msgstr "" "Anexa (ou edita, se já existir) uma nota ao item atualmente selecionado" msgid "View the note attached to the currently selected item." msgstr "Vê a nota anexada ao item atualmente selecionado." msgid "Raise a task priority inside the todo panel." msgstr "Aumenta a prioridade de uma tarefa no painel de tarefas." msgid "Lower a task priority inside the todo panel." msgstr "Reduz a prioridade de uma tarefa no painel de tarefas." msgid "FATAL ERROR: null file pointer." msgstr "ERRO FATAL: ponteiro nulo de arquivo." #, c-format msgid "When adding default key for \"%s\", \"%s\" was already assigned!" msgstr "Quando adicionava tecla padrão para \"%s\", \"%s\" já foi designada!" msgid "xmalloc: zero size" msgstr "xmalloc: tamanho zero" msgid "xmalloc: out of memory" msgstr "xmalloc: memória insuficiente" msgid "xcalloc: zero size" msgstr "xcalloc: tamanho zero" msgid "xcalloc: overflow" msgstr "xcalloc: estouro de capacidade" msgid "xcalloc: out of memory" msgstr "xcalloc: memória insuficiente" msgid "xrealloc: zero size" msgstr "xrealloc: tamanho zero" msgid "xrealloc: overflow" msgstr "xrealloc: estouro de capacidade" msgid "xrealloc: out of memory" msgstr "xrealloc: memória insuficiente" msgid "could not allocate memory to store block info" msgstr "não foi possível alocar memória para armazenar informação do bloco" msgid "Block not found" msgstr "Bloco não encontrado" #, c-format msgid "overflow at %s" msgstr "estouro de capacidade em %s" #, c-format msgid "dbg_free: null pointer at %s" msgstr "dbg_free: ponteiro nulo em %s" #, c-format msgid "block seems already freed at %s" msgstr "bloco parece já estar livre em %s" #, c-format msgid "corrupt block header at %s" msgstr "cabeçalho do bloco corrompido em %s" #, c-format msgid "corrupt block end at %s, (end = %u, should be %d)" msgstr "final de bloco corrompido em %s, (final = %u, deveria ser %d)" msgid "---==== MEMORY BLOCK ====----------------\n" msgstr "---==== BLOCO DE MEMÓRIA ====-----------\n" #, c-format msgid " id: %u\n" msgstr " id: %u\n" #, c-format msgid " size: %u\n" msgstr " tamanho: %u\n" #, c-format msgid " allocated in: %s\n" msgstr " alocado em: %s\n" msgid "-----------------------------------------\n" msgstr "----------------------------------------\n" msgid "+------------------------------+\n" msgstr "+-----------------------------------------+\n" msgid "| calcurse memory usage report |\n" msgstr "| relatório de uso de memória do calcurse |\n" #, c-format msgid " number of calls: %u\n" msgstr " número de chamadas: %u\n" #, c-format msgid " allocated blocks: %u\n" msgstr " blocos alocados: %u\n" #, c-format msgid " unfreed blocks: %u\n" msgstr " blocos não livres: %u\n" #, c-format msgid "Warning: could not open %s, Aborting..." msgstr "Aviso: não foi possível abrir %s. Abortando..." msgid "error while launching command: could not fork" msgstr "erro durante o lançamento do comando: não foi possível realizar fork" msgid "error while launching command" msgstr "erro durante o lançamento do comando" msgid "(if set to YES, notify-bar will be displayed)" msgstr "(Se definida como SIM, a barra de notificação será exibida)" msgid "(Format of the date to be displayed inside notify-bar)" msgstr "(Formato da data a ser exibida dentro da barra de notificação)" msgid "(Format of the time to be displayed inside notify-bar)" msgstr "(Formato de horário a ser exibido dentro da barra de notificação)" msgid "" "(Warn user if an appointment is within next 'notify-bar_warning' seconds)" msgstr "" "(Avisa o usuário se um agendamento ocorrerá nos próximos \"notify-bar_warning" "\" segundos)" msgid "(Command used to notify user of an upcoming appointment)" msgstr "(Comando usado para notificar usuário de um agendamento próximo)" msgid "(Notify all appointments instead of flagged ones only)" msgstr "(Notifica todos agendamentos ao invés de somente os marcados)" msgid "(Run in background to get notifications after exiting)" msgstr "(Executa em plano de fundo para pegar notificações depois de sair)" msgid "(Log activity when running in background)" msgstr "(Registra atividades quando estiver executando em plano de fundo)" msgid "Enter the time format (see 'man 3 strftime' for possible formats) " msgstr "" "Entre com o formato do horário (veja \"man 3 strftime\" para formatos " "possíveis) " msgid "Enter the number of seconds (0 not to be warned before an appointment)" msgstr "" "Entre com o número de segundos (0 para não ser avisado antes do agendamento)" msgid "Enter the notification command " msgstr "Entre com o comando de notificação " msgid "notification options" msgstr "opções de notificação" msgid "incoherent repetition type" msgstr "" "(se definida como SIM, salvamento automático será feito quando estiver de " "saída)" msgid "unknown repetition type" msgstr "tipo de repetição desconhecida" msgid "unknown character" msgstr "caractere desconhecido" msgid "event not found" msgstr "evento não encontrado" msgid "appointment not found" msgstr "agendamento não encontrado" msgid "syntax error in item date" msgstr "erro de sintaxe no item data" msgid "date error in item exception" msgstr "erro de data em exceção de item" #, c-format msgid "Could not remove calcurse lock file: %s\n" msgstr "Não foi possível excluir arquivo de trava do Calcurse: %s\n" #, c-format msgid "Error setting signal #%d : %s\n" msgstr "Erro na definição de sinal #%d : %s\n" msgid "no note attached" msgstr "nenhuma nota anexada" msgid "no such todo" msgstr "tarefa inexistente" msgid "todo not found" msgstr "tarefa não encontrada" msgid "ERROR setting first day of week" msgstr "ERRO na configuração do primeiro dia do mês" #, fuzzy msgid "The day you entered is not valid" msgstr "A frequência informada não é válida." #, c-format 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]):" msgstr "Insira o horário início ([hh:mm] ou [hhmm]):" msgid "Press [Enter] to continue" msgstr "Pressione [Enter] para continuar" msgid "You entered an invalid time, should be [hh:mm] or [hhmm]" msgstr "Você inseriu um horário inválido, deveria ser [hh:mm] ou [hhmm]" msgid "Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):" msgstr "" "Insira um horário de término ([hh:mm], [hhmm]) ou duração ([+hh:mm], " "[+xxxdxxhxxm]):" msgid "Invalid time: start time must be before end time!" msgstr "" "Horário inválido: horário de início deve ser antes do horário de término!" msgid "Enter the new item description:" msgstr "Insira uma descrição para o novo item:" msgid "Enter the new repetition type:" msgstr "Insira o novo tipo de repetição:" msgid "(d)aily" msgstr "(d)iária" msgid "(w)eekly" msgstr "(s)emanal" msgid "(m)onthly" msgstr "(m)ensal" msgid "(y)early" msgstr "(a)nual" #, c-format msgid "(currently using %s)" msgstr "(atualmente usando %s)" msgid "[dwmy]" msgstr "[dsma]" msgid "The frequence you entered is not valid." msgstr "A frequência informada não é válida." msgid "The entered date is not valid." msgstr "A data informada não é válida." #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition." msgstr "Formatos possíveis são [%s] ou \"0\" para repetição sem fim." msgid "Enter the new repetition frequence:" msgstr "Entre com uma nova frequência de repetição:" #, c-format msgid "Enter the new ending date: [%s] or '0'" msgstr "Entre com a nova data final: [%s] ou \"0\"" msgid "Description" msgstr "Descrição" msgid "Repetition" msgstr "Repetição" msgid "Edit: " msgstr "Editar: " msgid "Start time" msgstr "Horário de início" msgid "End time" msgstr "Horário de término" msgid "Move" msgstr "Mover" msgid "Pipe item to external command:" msgstr "Redirecionar o item para comando externo:" msgid "Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:" msgstr "" "Insira o horário de início ([hh:mm] ou [hhmm]); deixe em branco para um " "evento de dia inteiro:" msgid "Enter description:" msgstr "Insera uma descrição:" msgid "You entered an invalid start time, should be [hh:mm] or [hhmm]" msgstr "" "Você inseriu um horário de início inválido - deveria ser [hh:mm] ou [hhmm]" msgid "" "Invalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], " "[+xxxdxxhxxm] or [+mm]" msgstr "" "Horário de término/duração inválido, deveria ser [hh:mm], [hhmm], [+hh:mm], " "[+xxxdxxhxxm] ou [+mm]" msgid "Do you really want to delete this item?" msgstr "Tem certeza que deseja excluir este item?" msgid "This item is recurrent. Delete (a)ll occurences or just this (o)ne?" msgstr "" "Este item é recorrente. Excluir (t)odas as ocorrências ou (s)omente esta?" msgid "[ao]" msgstr "[ts]" msgid "This item has a note attached to it. Delete (i)tem or just its (n)ote?" msgstr "" "Este item tem uma anotação anexada a ele. Excluir o (i)tem ou somente sua " "(n)ota?" msgid "[in]" msgstr "[in]" msgid "Enter the repetition type:" msgstr "Insira o tipo da repetição:" msgid "Enter the repetition frequence:" msgstr "Insira a frequência de repetição:" #, c-format msgid "Enter the ending date: [%s] or '0' for an endless repetition" msgstr "Insira a data final: [%s] ou \"0\" para uma repetição sem fim" #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition" msgstr "Formatos possíveis são [%s] ou \"0\" para uma repetição sem fim" msgid "This item is already a repeated one." msgstr "Este é um item repetido." msgid "Sorry, the date you entered is older than the item start time." msgstr "Desculpe, a data que foi informou é mais antiga que a data inicial." msgid "wrong item type" msgstr "tipo de item errado" msgid "Enter the new TODO item:" msgstr "Insira o novo item da TAREFA:" msgid "Enter the TODO priority [1 (highest) - 9 (lowest)]:" msgstr "Insira a prioridade da TAREFA [1 (mais alta) - 9 (mais baixa)]:" msgid "Do you really want to delete this task?" msgstr "Tem certeza que deseja excluir esta tarefa?" msgid "This item has a note attached to it. Delete (t)odo or just its (n)ote?" msgstr "" "Este item possui uma nota anexada a ele. Excluir a (t)arefa ou somente sua " "(n)ota?" msgid "[tn]" msgstr "[tn]" msgid "Enter the new TODO description:" msgstr "Insira a nova descrição da TAREFA:" msgid "TODO:" msgstr "TAREFA:" msgid "/!\\ INTERNAL ERROR /!\\" msgstr "/!\\ ERRO INTERNO /!\\" msgid "Please report the following bug:" msgstr "Por favor, reporte o seguinte erro:" msgid "[yn]" msgstr "[sn]" msgid "Press any key to continue..." msgstr "Pressione qualquer tecla para continuar..." msgid "failure in mktime" msgstr "falha no mktime" msgid "error in mktime" msgstr "erro no mktime" msgid "yes" msgstr "sim" msgid "no" msgstr "não" msgid "option not defined" msgstr "opção não definida" #, c-format msgid "temporary file \"%s\" could not be created" msgstr "arquivo temporário \"%s\" não pôde ser criado" #, c-format msgid "Error when closing file at %s" msgstr "Erro em fechar arquivo em %s" msgid "No note file found\n" msgstr "Nenhuma nota encontrada\n" msgid "January" msgstr "Janeiro" msgid "February" msgstr "Fevereiro" msgid "March" msgstr "Março" msgid "April" msgstr "Abril" msgid "May" msgstr "Maio" msgid "June" msgstr "Junho" msgid "July" msgstr "Julho" msgid "August" msgstr "Agosto" msgid "September" msgstr "Setembro" msgid "October" msgstr "Outubro" msgid "November" msgstr "Novembro" msgid "December" msgstr "Dezembro" msgid "Sun" msgstr "Dom" msgid "Mon" msgstr "Seg" msgid "Tue" msgstr "Ter" msgid "Wed" msgstr "Qua" msgid "Thu" msgstr "Qui" msgid "Fri" msgstr "Sex" msgid "Sat" msgstr "Sab" msgid "mm/dd/yyyy" msgstr "mm/dd/yyyy" msgid "dd/mm/yyyy" msgstr "dd/mm/yyyy" msgid "yyyy/mm/dd" msgstr "yyyy/mm/dd" msgid "yyyy-mm-dd" msgstr "yyyy-mm-dd" msgid "unknown panel" msgstr "painel desconhecido" msgid "Usage: calcurse-upgrade [-h|-v|--config ]" msgstr "Uso: calcurse-upgrade [-h|-v|--config ]" msgid "unrecognized option:" msgstr "opção não reconhecida:" msgid "Configuration file not found:" msgstr "Arquivo de configuração não encontrado:" msgid "Pre-3.0.0 configuration file format detected..." msgstr "Formato de arquivo de configuração pre-3.0.0 detectado..." msgid "Create temporary backup of the configuration file..." msgstr "cria backup temporário do arquivo de configuração..." msgid "Old backup file found:" msgstr "Arquivo de backup antigo encontrado:" msgid "" "\n" "If a previous conversion did not complete, please try to restore your\n" "configuration from this backup and then remove the backup file." msgstr "" "\n" "Se uma conversão anterior não completou, favor tente restaurar sua\n" "configuração a partir deste backup e, então, exclua o arquivo backup." msgid "done" msgstr "feito" msgid "Old temporary file found:" msgstr "Arquivo temporário antigo encontrado:" msgid "" "\n" "If a previous conversion did not complete, please try to remove this file " "and\n" "start over with a backup of your old configuration file." msgstr "" "\n" "Se uma conversão anterior não completou, favor tente excluir este\n" "arquivo e começar do começo com um backup de seu arquivo de\n" "configuração antigo." msgid "Upgrade configuration directives..." msgstr "Atualizar diretivas de configuração..." msgid "Remove temporary backup..." msgstr "Excluir backup temporário..." #~ msgid "Argument to the '-d' flag is not valid\n" #~ msgstr "Argumento para a sinalização \"-d\" não é válido\n" #~ msgid "Possible argument format are: '%s' or 'n'\n" #~ msgstr "Possíveis formatos de argumentos são: \"%s\" ou \"n\"\n" #~ msgid "Argument is not valid\n" #~ msgstr "Argumento não é válido\n" #~ msgid "Argument format for -s and --startday is: '%s'\n" #~ msgstr "Formato de argumento para -s e --startday é: '%s'\n" #~ msgid "Argument format for -r and --range is: 'n'\n" #~ msgstr "Formato de argumento para -r e --range é: \"n\"\n" #~ msgid "Argument for '-x' should be either 'ical' or 'pcal'\n" #~ msgstr "Argumento para \"-x\" deveria ser \"ical\" ou \"pcal\"\n" #~ msgid "" #~ "Option '-S' must be used with either '-d', '-r', '-s', '-a' or '-t'\n" #~ msgstr "" #~ "Opção \"-S\" deve ser usada com \"-d\", \"-r\", \"-s\", \"-a\" ou \"-t\"\n" #~ msgid "" #~ "Option '-l' must be used with either '-d', '-r', '-s', '-a' or '-t'\n" #~ msgstr "" #~ "A saída de \"-l\" deve ser usada com \"-d\", \"-r\", \"-s\", \"-a\" ou \"-" #~ "t\"\n" #~ msgid "%s does not exist, create it now [y/n]? " #~ msgstr "%s não existe; criá-lo agora [s/n]?" #~ msgid "aborting...\n" #~ msgstr "abortando...\n" #~ msgid "%s successfully created\n" #~ msgstr "%s criado com sucesso\n" #~ msgid "starting interactive mode...\n" #~ msgstr "iniciando modo interativo...\n" #~ msgid "" #~ "The day you entered is not valid (should be between 01/01/1902 and " #~ "12/31/2037)" #~ msgstr "" #~ "O dia inserido não é válido (deveria ser entre 01/01/1902 e 12/31/2037)" calcurse-4.0.0/po/Makevars0000644000175000017500000000347512273003161012353 00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --no-location --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = calcurse Development Team # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = bugs@calcurse.org # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = calcurse-4.0.0/po/nl.gmo0000644000175000017500000004245512472330423012002 00000000000000Þ•à3èKé†5¼8Ú<6P6‡)¾4èIg5oB¥9è-" PZox!£ª*²Ýäì  +D1v }#ˆ¬-µãéð3)#]*¬µ#¾:â"B Kls*|§BÅD<M(г#Ó÷F^B~-Áï!ö %%;K‡¦ÁÜå.î (,4:?"F,i–1´æîóøý  "-?R[ov‡ –:·ò 'A$^AƒÅÌ Óôù  ! 0 6 : ? I P i †  L˜ >å $!&(!#O!s!<’!'Ï!C÷!$;"=`"Fž"å"é"4ï"($#M#Q#c#f#6k#¢#;«#'ç#7$CG$‹$5$Å$Ì$ë$% %#%+A% m%y%)‹%&µ%"Ü%$ÿ% $&E&_&s&Š&&˜&¨&È&!æ&'#'3'S'l'~'Ž'©'Ç'à':þ'9(L(a(t(w(–( §(´(%É(ï($)4)O)i)%‰) ¯)Ð)Ø) ç)ñ) **%*7*K*]*(o*˜*µœ*BR,¡•,7-:V-1‘-,Ã-+ð-*.HG.T. å.=ñ.F//Av/-¸/ æ/ô/ 0 0!#0E0L0*T00†0Ž0 £0 ¯0 ¹0 Ä0Î0TÔ0)1 21)>1h15q1§1­1"´1×11ò1$2+D2p2y2#‚24¦2Û23â23 3?3G3-O3}34›3VÐ34'4.\4 ‹4¬4È4Fã4*53F5.z5©51°5 â5&ð596Q6q66©6²6)»6 å6ï6ó6ü67 7*70;7l75‡7½7Å7Ê7Ï7×7Þ7ä7í7ó7÷7 û788 $8.8J8O8X8`8i8 n8/8 ¿8à8 ÿ8$ 9#E9=i9§9®9&´9Û9á9é9ü9 :::: %: 0:$::!_: :‹:W“:8ë:$;+(;#T; x;<™;$Ö;<û;8<9T<EŽ<Ô<Ø<Là<--=[=_=s=z=;ƒ= ¿=MÊ=->8F>;>»>?¿>ÿ>?%?6eƒ}×¹œÙ ¯F „x€…9zÏàVj°&‘^˜tÑSD–š»"‚¥*{QbʉGÉ`ÀuÕÔgª7ÌiOXIlà sÈ¡d™Âݺ'J” T“³½¾Ÿ·3¦Ü [ ÞZ_ÓAßH\²Y¢¶/ŒÆm’± For more information, type '?' from within Calcurse, or read the manpage. Too many errors while reading configuration file! Please backup your keys file, remove it from directory, and launch calcurse again. "%s" assigned multiple times!(Command used to notify user of an upcoming appointment)(Format of the date to be displayed in non-interactive mode)(Format of the date to be displayed inside notify-bar)(Format of the time to be displayed inside notify-bar)(Format to be used when entering a date: (Press '^P' or '^N' to move up or down, 'Q' to quit)(Warn user if an appointment is within next 'notify-bar_warning' seconds)(d)aily(if set to YES, automatic save is done when quitting)(if set to YES, confirmation is required before deleting an event)(if set to YES, confirmation is required before quitting)(if set to YES, notify-bar will be displayed)(m)onthly(terminal's default)(w)eekly(y)early+------------------------------+ +1 Day+1 Week----------------------------------------- -1 Day-1 Week/!\ INTERNAL ERROR /!\Add ApptAdd ItemAdd TodoAppointmentsAprilAttach (or edit if one exists) a note to the currently selected itemAugustBackgroundCalcurse %s - text-based organizer CalendarChoose the file used to export calcurse data:ColorConfigConfiguration file not found:Could not access "%s": %s Could not detach from the controlling terminal: %s Could not stop daemon properly: %s Data files found. Data will be loaded now.DecemberDel ItemDelete the currently selected item.Display the currently selected item inside a popup window.DownERROR setting first day of weekEdit ItmEdit the currently seleted item.Edit: EditNoteEnter an option number to change its valueEnter the configuration menu.Enter the date format (see 'man 3 strftime' for possible formats) Enter the delay, in minutes, between automatic saves (0 to disable) Enter the ending date: [%s] or '0' for an endless repetitionEnter the file name to import data from:Enter the new item description:Enter the new repetition frequence:Enter the notification command Enter the number of seconds (0 not to be warned before an appointment)Enter the repetition frequence:Enter the time format (see 'man 3 strftime' for possible formats) Exit from the current menu, or quit calcurse.ExportExport data to a new file format.Exporting...FATAL ERROR: could not create %s: %s FATAL ERROR: the input file cannot be accessed, Aborting...FATAL ERROR: wrong import modeFailed to close "%s" - %s Failed to open "%s", - %s FebruaryFlag ItmFlag the currently selected item as important.ForegroundFriGeneralGo toHelpImportImport data from an external file.Internal error while displaying progress barInternal error: line too longInvalid time: start time must be before end time!JanuaryJulyJuneKeysLayoutLeftLoading...MarchMayMonMove down.Move to the left.Move to the right.Move up.No note file found NotifyNovemberOctoberOtherCmdPastePlease report the following bug:Possible formats are [%s] or '0' for an endless repetitionPress [ENTER] to continuePress [ENTER] to continue.Press [Enter] to continuePress any key to continue...Press the key you want to assign to:Print general information about calcurse's authors, license, etc.Prio.+Prio.-Problems accessing data file ...QuitRedrawRedraw calcurse's screen.RepeatRepeat an itemRightSatSaveSaving...SelectSelect the day to go to.Select the highlighted item.SeptemberSidebarSorry, colors are not supported by your terminal (Press [ENTER] to continue)Sorry, the date you entered is older than the item start time.SunThe data files were successfully savedThe data were successfully exportedThe entered date is not valid.The file cannot be accessed, please enter another file name.The frequence you entered is not valid.The ical file seems to be malformed. The end of item was not found.This item is already a repeated one.This key is already in use for %s, please choose another one.This key is not yet recognized by calcurse, please choose another one.ThuTodayToo many errors while reading keys file, aborting...Try 'calcurse -h' for more information. TueUndefined option!UpViewView the note attached to the currently selected item.ViewNoteWarning: could not erase temporary log file %s, Aborting...Warning: could not open %s, Aborting...Warning: could not open temporary log file, Aborting...Warning: ical header malformed or wrong version number. Aborting...WedWelcome to Calcurse. Missing data files were created.[dwmy]appointment has no start time.appointment not foundbeg Weekcalcurse is not running calcurse is running (pid %d) calcurse is running in background (pid %d) color themecompleted tasks: could not compute duration (no end time).could not get entire item description.could not retrieve event end time.could not retrieve event start time.could not retrieve item summary.date error in appointmentdate error in eventdescription malformed.doneend Weekerror in mktimeerror loading next appointment error while launching commanderror while sending notification event date is not defined.event not foundfailed to open appointment filefailed to open todo filefailure in mktimegeneral optionsincoherent repetition typeitem could not be identified.item duration malformed.item has a negative duration.item priority is not acceptable (must be between 1 and 9).keys configurationlayout configurationnext appointment: nono event nor appointment foundno note attachedno such todonotification optionsrecurrence exception dates malformed.recurrence frequence not found.recurrence frequence not recognized.recurrence rule malformed.syntax error in item datesyntax error in item repetitionsyntax error in item time or durationterminated at %s with signal %d to do: todo not foundundefinedunknown characterunknown colorunknown export typeunknown ical typeunknown import typeunknown item typewrong export modewrong format in the appointment or eventyesProject-Id-Version: calcurse Report-Msgid-Bugs-To: bugs@calcurse.org POT-Creation-Date: 2015-02-22 10:37+0100 PO-Revision-Date: 2014-08-03 21:51+0000 Last-Translator: Lukas Fleischer Language-Team: Dutch (http://www.transifex.com/projects/p/calcurse/language/nl/) Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Typ '?' in Calcurse voor meer informatie, of lees de man-pagina. Teveel fouten tijdens het lezen van het configuratiebestand! Maak een backup van het sneltoetsenbestand, verwijder het van de map en start calcurse opnieuw op. "%s" meer dan eens toegewezen!(Commando dat melding geeft van op handen zijnde afspraak)(Formaat van de datum in niet-interactieve modus)(Formaat van de datum in de informatiebalk.)(Formaat van de tijd in de informatiebalk.)Het te gebruiken formaat bij datuminvoer: (Druk '^P' of '^N' om omhoog of omlaag te bewegen, 'Q' om af te sluiten)Meldt gebruiker dat er een afspraak binnen 'informatiebalk_waarschuwing' seconden is(d)agelijks(Bij JA, wordt er automatisch opgeslagen bij einde programma)(Bij JA, is een bevestiging nodig voor het wissen van een gebeurtenis)(Bij JA, wordt er een bevestiging gevraagd bij eindigen programma(Bij JA, wordt de informatiebalk weergegeven)(m)aandelijksstandaard van terminal(w)ekelijks(y)aarlijks+------------------------------+ +1 Dag+1 Week----------------------------------------- -1 Dag-1 Week/!\ INTERNE FOUT /!\Nieuw AfsprNieuw ItmNieuw TaakAfsprakenaprilVoeg een noot toe aan het huidig geselecteerde item (of wijzig dit indien bestaande)augustusAchtergrondCalcurse %s - tekst-gebaseerde organizer KalenderKies het bestand om calcurse data naar te exporteren:KleurConfigConfiguratiebestand niet gevonden:Geen toegang tot "%s": %s Kon niet van de control terminal loskoppelen: %s Kon de deamon niet stoppen: %s Databestanden gevonden. Data wordt geladen.decemberWis ItemVerwijder huidig geselecteerde itemGeef het huidig geselecteerde item weer in een popupOmlaagFOUT in het instellen van de eerste dag van de weekWzg ItmWijzig huidig geselecteerde itemWijzig:WzgNootVoer een nummer in om de waarde te veranderenGa naar het configuratiemenu.Geef het formaat van de datum (zie 'man 3 strftime')Voer het tijdsinterval in minuten voor automatisch opslaan (0 om dit uit te schakelen)Geef einddatum: [%s] of '0' voor oneindige herhalingKies het bestand voor het importeren van data:Voer een nieuwe beschrijving in:Voer herhalingsinterval in:Geef het meldingscommando Geef het aantal seconden (0 voor geen waarschuwing voor een afspraak).Geef de herhalingsinterval:Geef het formaat van de tijd (zie 'man 3 strftime')Verlaat het huidige menu, of verlaat Calcurse.ExportExporteer gegevens naar een nieuw bestandsformaatExporteren...FATALE FOUT: kan %s niet aanmaken: %s FATALE FOUT: invoerbestand niet toegankelijk, Afbreken...FATALE FOUT: foute import modusFout bij sluiten "%s" - %s Fout bij openen "%s", - %s februariVlag ItmMarkeer het huidig bestand als belangrijkVoorgrond vrAlgemeenGa naarHulpImportImporteer gegevens uit een extern bestand.Interne fout bij het tonen van de voortgangsbalkInterne fout: lijn te langOngeldige tijd: aanvangstijd moet voor eindtijd zijn!januarijulijuniToetsenLayoutLinksLaden...maartmei maGa omlaagGa naar links.Ga naar rechts.Ga omhoogNoot-bestand niet gevonden InfonovemberoktoberAnderCmdPlakRapporteer aub de volgende fout:Mogelijk formaat is: [%s] of '0' voor oneindig.Druk op [ENTER] om door te gaan)[ENTER]-toets om door te gaan.Druk op [Enter] om door te gaan)Druk op een toets om door te gaan...Druk de toets die u wilt toewijzen:Geef algemene informatie van de auteurs, licentie, etc. weer.Prio.+rio.-Probleem bij benaderen databestand ...EindeVerversVervers het schermHerhalenHerhaal itemRechts zaOpslaanOpslaan...SelecteerSecteer een datum om naartoe te gaanSelecteer het gemarkeerde bestandseptemberZijbalkHelaas wordt kleur niet door uw terminal ondersteund. (druk op [ENTER] om door te gaan)Sorry, de ingevoerde datum is ouder dan de aanvangstijd. zoDe databestanden zijn met succes opgeslagenDe data is met succes geëxporteerdDe ingevoerde datum is ongeldig.Het bestand is ontoegankelijk, kies een andere bestandsnaam.Het ingevoerde interval is ongeldig.Ical-bestand oogt onjuist. Het einde van item niet gevonden.Dit item wordt al herhaald.Deze toets is al in gebruik voor %s, kies aub een andere.Deze toets wordt nog niet door Calcurse herkend, kies een andere aub. doVandaagTeveel fouten bij het laden van het sneltoetsenbestand, wordt afgebroken ...Gebruik 'calcurse -h', voor meer informatie. diNiet gekende optie!OmhoogBekijkenBekijk de noot toegevoegd aan het huidig geselecteerde itemBekijkNootWaarschuwing: kon het tijdelijke logbestand %s niet verwijderen. Afbreken ...Pas op: bestand %s niet te openen. Stoppen...Pas op: kan tijdelijk logbestand niet openen, Stoppen...Pas op: ical header onjuist of verkeerde versie. Stoppen... woWelkom bij Calcurse. De missende databestanden zijn aangemaakt.[dwmy]afspraak heeft geen begintijd.afspraak niet gevondenbeg Weekcalcurse is niet actief calcurse draait (pid%d) calcurse draait op de achtergrond (pid%d) Kleurthemaafgewerkte taken: kan tijdsduur niet berekenen (geen eindtijd).onvolledige item omschrijvingkan eindtijd van gebeurtenis niet ophalenkan begintijd van gebeurtenis niet ophalenkan item onderwerp niet ophalengegevensfout in de afspraakdatumfout in gebeurtenisomschrijving beschadigdklaareind Weekfout in mktimefout bij laden van volgende afspraak fout bij uitvoeren commandofout bij verzenden notificatie datum van de gebeurtenis is niet gespecifieerdGebeurtenis niet gevondenAfsprakenbestand niet kunnen openenkon het todo-bestand niet openenfout in mktimeAlgemene optiesHerhalingstype is niet coherentitem onbekenditem tijdsduur onjuistitem heeft een negatieve tijdsduurPrioriteit van item is onjuist (kies nr tussen 1 en 9)Toetsinstellingenlayout configuratieVolgende afspraak : neeGeen gebeurtenis of afspraak gevondengeen noot bijgevoegdEr is zo geen todonotificatie-optiesherhaling exceptie datum onjuistherhalingsfrequentie niet gevonden.herhalingsfrequentie niet herkendherhalingsregel onjuistsyntaxfout in datum van itemsyntaxfout in de herhaling van het itemsyntaxfout in itemtijd of duurtijd van het itemgestopt bij %s met signaal %d Taken: todo niet gevondenOngekendonbekend karakterOnbekende kleuronbekend exporttypeonbekend ical typeonbekend type om te importerenongekend type itemfoute exportmodusfout formaat in de afspraak of gebeurtenisjacalcurse-4.0.0/po/es.gmo0000644000175000017500000001534112472330423011772 00000000000000Þ•WÔŒˆK‰8Õ66EI|5ÆBü9? -y § ¼ Å Î × ä ê ñ #ü  -) W ] *d  ˜ ¡ Bª í # 1 FQ ˜ B¸ û    ! , 0 8 > 1C u } ‚ ‡ Ž ™ Ÿ £ § ® · ¿ È â ý  4 U Z a h l q { L… >Ò &#<`<'¼$ä ( 6:?5CyŒ—·›NS:¢:Ý9GRAšFÜ;#:_š ¸Å Öäôú0 BBM–; ÙãóS,W,„$±GÖ&RE˜ ¡¯·Ç×ÛãèDî39? E Q]chl {…œ¹×'ô+H NX`d l yH„EÍ.(F"oC’/Ö)0/4dhnEr¸ÇÊÞ54(IB;*%W+7!": FN $3>=-L@M/C,. 9&8) ? 1'KDJUG<TA#HO0S REV62PQ For more information, type '?' from within Calcurse, or read the manpage. (Command used to notify user of an upcoming appointment)(Format of the date to be displayed inside notify-bar)(Format of the time to be displayed inside notify-bar)(Warn user if an appointment is within next 'notify-bar_warning' seconds)(if set to YES, automatic save is done when quitting)(if set to YES, confirmation is required before deleting an event)(if set to YES, confirmation is required before quitting)(if set to YES, notify-bar will be displayed)(terminal's default)Add ApptAdd ItemAdd TodoAppointmentsAprilAugustBackgroundCalcurse %s - text-based organizer CalendarChoose the file used to export calcurse data:ColorConfigData files found. Data will be loaded now.DecemberDel ItemEdit ItmEnter the date format (see 'man 3 strftime' for possible formats) Enter the new item description:Enter the new repetition frequence:Enter the notification command Enter the number of seconds (0 not to be warned before an appointment)Enter the repetition frequence:Enter the time format (see 'man 3 strftime' for possible formats) ExportExporting...FebruaryFlag ItmForegroundFriGeneralGo toHelpInvalid time: start time must be before end time!JanuaryJulyJuneLayoutLoading...MarchMayMonNotifyNovemberOctoberOtherCmdPress [ENTER] to continuePress [ENTER] to continue.Press [Enter] to continuePress any key to continue...Problems accessing data file ...QuitRedrawRepeatSatSaveSaving...SeptemberSorry, colors are not supported by your terminal (Press [ENTER] to continue)Sorry, the date you entered is older than the item start time.SunThe data files were successfully savedThe data were successfully exportedThe entered date is not valid.The file cannot be accessed, please enter another file name.The frequence you entered is not valid.This item is already a repeated one.ThuTry 'calcurse -h' for more information. TueViewWedWelcome to Calcurse. Missing data files were created.next appointment: noto do: yesProject-Id-Version: calcurse Report-Msgid-Bugs-To: bugs@calcurse.org POT-Creation-Date: 2015-02-22 10:37+0100 PO-Revision-Date: 2014-08-03 21:51+0000 Last-Translator: Lukas Fleischer Language-Team: Spanish (http://www.transifex.com/projects/p/calcurse/language/es/) Language: es MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Para mas informacion, pulsa '?' dentro de Calcurse, o lee la pagina del man. (Comando usado para notificar al usuario una cita proxima)(Formato de la fecha dentro de la barra de notificaciones)(Formato de la hora dentro de la barra de notificaciones)(Alarma de cita en los proximos 'alarma_barra-notificaciones' segundos)(si se fija en SI, se guardan automaticamente los datos al salir)(si se fija en SI, se requiere confirmacion antes de borrar un evento)(si se fija en SI, se requiere confirmacion antes de salir)(si se fija en SI, se mostrara la barra de notificaciones)(el del terminal por defecto)Añadir CitaAñadir elementoAñadir tareaCitas y eventosAbrilAgostoColor del fondo Calcurse %s - organizador basado en modo texto CalendarioElige el archivo que se usara para exportar los datos de Calcurse:ColorConfigArchivos de datos encontrados. Ahora se cargaran los datos.DiciembreBorrar elementoEditar elementoIntroduce el formato de la fecha (ver 'man 3 strftime' para los formatos posibles) Introduce la descripcion del nuevo elemento:Introduce la nueva frecuencia de repeticion:Introduce el comando de notificacionIntroduce el numero de segundos (con 0 no se avisara antes de una cita)Introduce la frecuencia de repeticion:Introduce el formato de la hora (ver 'man 3 strftime' para los formatos posibles) ExportarExportando...FebreroMarcar elementoColor del textoVieGeneralIr aAyudaHora no valida: La hora de inicio debe ser anterior a la hora final!EneroJulioJunioDisposicionCargando...MarzoMayoLunNotificacionesNoviembreOctubreOtros comandosPulsa [INTRO] para continuarPulsa [INTRO] para continuar.Pulsa [INTRO] para continuarPulsa cualquier tecla para continuar...Problemas al acceder al fichero de datos...SalirRedibujarRepetirSabGuardarGuardando...SeptiembreLo siento, tu terminal no soporta colores (Pulsa [INTRO] para continuar)La fecha que has introducido es anterior a la de inicio del elemento.DomLos archivos de datos se han salvado con exitoLos datos se han exportado correctamenteLa fecha introducida no es valida.El archivo no es accesible, por favor elige otro nombre de archivo.La frecuencia que has introducido no es valida.Este elemento es ya un elemento repetido.JuePrueba con 'calcurse -h' para mas informacion. MarVistaMieBienvenid@ a Calcurse. Se crearon los archivos de datos que faltaban.Proxima cita: noTareas pendientes: sicalcurse-4.0.0/po/calcurse.pot0000644000175000017500000006513512472326722013221 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR calcurse Development Team # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: bugs@calcurse.org\n" "POT-Creation-Date: 2015-02-22 10:37+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" msgid "null pointer" msgstr "" msgid "date error in appointment" msgstr "" msgid "no such appointment" msgstr "" msgid "" "Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" " [-c] [-D] [-S] [--status]\n" " [--read-only]\n" msgstr "" msgid "Try 'calcurse -h' for more information.\n" msgstr "" msgid "" "\n" "Copyright (c) 2004-2015 calcurse Development Team.\n" "This is free software; see the source for copying conditions.\n" msgstr "" #, c-format msgid "Calcurse %s - text-based organizer\n" msgstr "" msgid "" "\n" "For more information, type '?' from within Calcurse, or read the manpage.\n" msgstr "" msgid "Mail feature requests and suggestions to .\n" msgstr "" msgid "Mail bug reports to .\n" msgstr "" msgid "" "\n" "Miscellaneous:\n" " -h, --help\n" "\tprint this help and exit.\n" "\n" " -v, --version\n" "\tprint calcurse version and exit.\n" "\n" " --status\n" "\tdisplay the status of running instances of calcurse.\n" "\n" " --read-only\n" "\tDon't save configuration nor appointments/todos. Use with care.\n" "\n" "Files:\n" " -c , --calendar \n" "\tspecify the calendar to use (has precedence over '-D').\n" "\n" " -D , --directory \n" "\tspecify the data directory to use.\n" "\tIf not specified, the default directory is ~/.calcurse\n" "\n" "Non-interactive:\n" " -a, --appointment\n" " \tprint events and appointments for current day and exit.\n" "\n" " -d , --day \n" "\tprint events and appointments for or upcoming days and\n" "\texit. To specify both a starting date and a range, use the\n" "\t'--startday' and the '--range' option.\n" "\n" " -g, --gc\n" "\trun the garbage collector for note files and exit. \n" "\n" " -i , --import \n" "\timport the icalendar data contained in . \n" "\n" " -n, --next\n" "\tprint next appointment within upcoming 24 hours and exit. Also given\n" "\tis the remaining time before this next appointment.\n" "\n" " -l , --limit \n" "\tonly print information regarding the next items. \n" "\n" " -r[num], --range[=num]\n" "\tprint events and appointments for the [num] number of days\n" "\tand exit. If no [num] is given, a range of 1 day is considered.\n" "\n" " -s[date], --startday[=date]\n" "\tprint events and appointments from [date] and exit.\n" "\tIf no [date] is given, the current day is considered.\n" "\n" " -S, --search=\n" "\tsearch for the given regular expression within events, appointments,\n" "\tand todos description.\n" "\n" " -t[num], --todo[=num]\n" "\tprint todo list and exit. If the optional number [num] is given,\n" "\tthen only todos having a priority equal to [num] will be returned.\n" "\tThe priority number must be between 1 (highest) and 9 (lowest).\n" "\tIt is also possible to specify '0' for the priority, in which case\n" "\tonly completed tasks will be shown.\n" "\n" " -x[format], --export[=format]\n" "\texport user data to the specified format. Events, appointments and\n" "\ttodos are converted and echoed to stdout.\n" "\tTwo possible formats are available: 'ical' and 'pcal'.\n" "\tIf the optional argument format is not given, ical format is\n" "\tselected by default.\n" "\tnote: redirect standard output to export data to a file,\n" "\tby issuing a command such as: calcurse --export > calcurse.dat\n" msgstr "" #, c-format msgid "" "Error: both calcurse (pid: %d) and its daemon (pid: %d)\n" "seem to be running at the same time!\n" "Please check manually and restart calcurse.\n" msgstr "" #, c-format msgid "calcurse is running (pid %d)\n" msgstr "" #, c-format msgid "calcurse is running in background (pid %d)\n" msgstr "" msgid "calcurse is not running\n" msgstr "" msgid "completed tasks:\n" msgstr "" msgid "to do:\n" msgstr "" msgid "next appointment:\n" msgstr "" #, c-format msgid "invalid date: %s" msgstr "" #, c-format msgid "invalid range: %s" msgstr "" #, c-format msgid "invalid priority: %s" msgstr "" #, c-format msgid "invalid export format: %s" msgstr "" msgid "invalid filter mask" msgstr "" msgid "cannot handle more than one regular expression" msgstr "" #, c-format msgid "could not compile regular expression: %s" msgstr "" #, c-format msgid "invalid date range: %s" msgstr "" msgid "invalid argument combination" msgstr "" msgid "cannot specify a range and an end date" msgstr "" msgid "Export to (i)cal or (p)cal format?" msgstr "" msgid "[ip]" msgstr "" msgid "Do you really want to quit?" msgstr "" msgid "Command:" msgstr "" #, c-format msgid "Help topic does not exist: %s" msgstr "" #, c-format msgid "No such command: %s" msgstr "" msgid "unknown color" msgstr "" msgid "failed to open configuration file" msgstr "" #, c-format msgid "invalid configuration directive: \"%s\"" msgstr "" msgid "" "Pre-3.0.0 configuration file format detected, please upgrade running " "`calcurse-upgrade`." msgstr "" #, c-format msgid "configuration variable unknown: \"%s\"" msgstr "" #, c-format msgid "wrong configuration variable format for \"%s\"" msgstr "" msgid "layout configuration" msgstr "" msgid "Foreground" msgstr "" msgid "Background" msgstr "" msgid "(terminal's default)" msgstr "" msgid "color theme" msgstr "" msgid "(if set to YES, compact panels are used)" msgstr "" msgid "Calendar" msgstr "" msgid "Appointments" msgstr "" msgid "TODO" msgstr "" msgid "(specifies the panel that is selected by default)" msgstr "" msgid "(if set to YES, automatic save is done when quitting)" msgstr "" msgid "(run the garbage collector when quitting)" msgstr "" msgid "(if not null, automatically save data every 'periodic_save' minutes)" msgstr "" msgid "(if set to YES, confirmation is required before quitting)" msgstr "" msgid "(if set to YES, confirmation is required before deleting an event)" msgstr "" msgid "(if set to YES, messages about loaded and saved data will be displayed)" msgstr "" msgid "(if set to YES, progress bar will be displayed when saving data)" msgstr "" msgid "Monday" msgstr "" msgid "Sunday" msgstr "" msgid "(specifies the first day of week in the calendar view)" msgstr "" msgid "(Format of the date to be displayed in non-interactive mode)" msgstr "" msgid "(Format to be used when entering a date: " msgstr "" msgid "Enter an option number to change its value" msgstr "" msgid "(Press '^P' or '^N' to move up or down, 'Q' to quit)" msgstr "" msgid "Enter the date format (see 'man 3 strftime' for possible formats) " msgstr "" msgid "Enter the date format: " msgstr "" msgid "Enter the delay, in minutes, between automatic saves (0 to disable) " msgstr "" msgid "general options" msgstr "" msgid "Undefined option!" msgstr "" msgid "undefined" msgstr "" msgid "keys configuration" msgstr "" msgid "Press the key you want to assign to:" msgstr "" msgid "This key is not yet recognized by calcurse, please choose another one." msgstr "" #, c-format msgid "This key is already in use for %s, please choose another one." msgstr "" msgid "Some actions do not have any associated key bindings!" msgstr "" msgid "" "Sorry, colors are not supported by your terminal\n" "(Press [ENTER] to continue)" msgstr "" msgid "unknown item type" msgstr "" msgid "Event:" msgstr "" msgid "Appointment:" msgstr "" #, c-format msgid "Could not stop daemon properly: %s\n" msgstr "" #, c-format msgid "terminated at %s with signal %d\n" msgstr "" #, c-format msgid "Could not remove daemon lock file: %s\n" msgstr "" #, c-format msgid "Could not fork: %s\n" msgstr "" #, c-format msgid "Could not detach from the controlling terminal: %s\n" msgstr "" #, c-format msgid "Could not change working directory: %s\n" msgstr "" msgid "Cannot daemonize, aborting\n" msgstr "" msgid "Could not set lock file\n" msgstr "" #, c-format msgid "Could not access \"%s\": %s\n" msgstr "" #, c-format msgid "started at %s\n" msgstr "" msgid "error loading next appointment\n" msgstr "" #, c-format msgid "launching notification at %s for: \"%s\"\n" msgstr "" msgid "error while sending notification\n" msgstr "" #, c-format msgid "sleeping at %s for %d second\n" msgid_plural "sleeping at %s for %d seconds\n" msgstr[0] "" msgstr[1] "" #, c-format msgid "awakened at %s\n" msgstr "" #, c-format msgid "Could not stop calcurse daemon: %s\n" msgstr "" msgid "date error in event" msgstr "" msgid "date error in the event\n" msgstr "" msgid "Internal error: line too long" msgstr "" msgid "out of memory" msgstr "" msgid "unknown ical type" msgstr "" msgid "recurrence frequence not found." msgstr "" msgid "recurrence frequence not recognized." msgstr "" msgid "recurrence rule malformed." msgstr "" msgid "recurrence exception dates malformed." msgstr "" msgid "could not get entire item description." msgstr "" msgid "description malformed." msgstr "" msgid "appointment has no start time." msgstr "" msgid "could not compute duration (no end time)." msgstr "" msgid "item has a negative duration." msgstr "" msgid "event date is not defined." msgstr "" msgid "item could not be identified." msgstr "" msgid "could not retrieve item summary." msgstr "" msgid "could not retrieve event start time." msgstr "" msgid "could not retrieve event end time." msgstr "" msgid "item duration malformed." msgstr "" msgid "The ical file seems to be malformed. The end of item was not found." msgstr "" msgid "item priority is not acceptable (must be between 1 and 9)." msgstr "" msgid "Warning: ical header malformed or wrong version number. Aborting..." msgstr "" msgid "Saving..." msgstr "" msgid "Loading..." msgstr "" msgid "Exporting..." msgstr "" msgid "Internal error while displaying progress bar" msgstr "" msgid "Choose the file used to export calcurse data:" msgstr "" msgid "The file cannot be accessed, please enter another file name." msgstr "" msgid "Press [ENTER] to continue." msgstr "" #, c-format msgid "Failed to open \"%s\", - %s\n" msgstr "" msgid "Failed to build message\n" msgstr "" #, c-format msgid "Failed to print message \"%s\"\n" msgstr "" #, c-format msgid "Failed to close \"%s\" - %s\n" msgstr "" #, c-format msgid "%s does not exist" msgstr "" msgid "Problems accessing data file ..." msgstr "" msgid "The data files were successfully saved" msgstr "" msgid "Press [ENTER] to continue" msgstr "" msgid "failed to open appointment file" msgstr "" msgid "syntax error in the item date" msgstr "" msgid "no event nor appointment found" msgstr "" msgid "syntax error in item time or duration" msgstr "" msgid "syntax error in item identifier" msgstr "" msgid "wrong format in the appointment or event" msgstr "" msgid "syntax error in item repetition" msgstr "" msgid "failed to open todo file" msgstr "" msgid "The data files were reloaded successfully" msgstr "" msgid "There are unsaved modifications:" msgstr "" msgid "(d)iscard" msgstr "" msgid "(m)erge" msgstr "" msgid "(k)eep and cancel" msgstr "" msgid "[dmk]" msgstr "" msgid "failed to open key file" msgstr "" msgid "" "\n" "Too many errors while reading configuration file!\n" "Please backup your keys file, remove it from directory, and launch calcurse " "again.\n" msgstr "" msgid "Could not read key label" msgstr "" msgid "Key label not recognized" msgstr "" #, c-format msgid "Error reading key: \"%s\"" msgstr "" #, c-format msgid "\"%s\" assigned multiple times!" msgstr "" msgid "There were some errors when loading keys file, see log file?" msgstr "" msgid "Too many errors while reading keys file, aborting..." msgstr "" #, c-format msgid "FATAL ERROR: could not create %s: %s\n" msgstr "" msgid "Welcome to Calcurse. Missing data files were created." msgstr "" msgid "Data files found. Data will be loaded now." msgstr "" msgid "The data were successfully exported" msgstr "" msgid "unknown export type" msgstr "" msgid "wrong export mode" msgstr "" msgid "Enter the file name to import data from:" msgstr "" #, c-format msgid "Import process report: %04d lines read" msgstr "" msgid "unknown import type" msgstr "" msgid "FATAL ERROR: the input file cannot be accessed, Aborting..." msgstr "" msgid "FATAL ERROR: wrong import mode" msgstr "" #, c-format msgid "%d app" msgid_plural "%d apps" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d event" msgid_plural "%d events" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d todo" msgid_plural "%d todos" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d skipped" msgstr "" msgid "Some items could not be imported, see log file?" msgstr "" msgid "Warning: could not open temporary log file, Aborting..." msgstr "" msgid "Warning: could not create temporary log file, Aborting..." msgstr "" msgid "No log file to display!" msgstr "" #, c-format msgid "Warning: could not erase temporary log file %s, Aborting..." msgstr "" msgid "Invalid delay" msgstr "" #, c-format msgid "" "\n" "WARNING: it seems that another calcurse instance is already running.\n" "If this is not the case, please remove the following lock file: \n" "\"%s\"\n" "and restart calcurse.\n" msgstr "" msgid "Cancel" msgstr "" msgid "Select" msgstr "" msgid "Credits" msgstr "" msgid "Help" msgstr "" msgid "Quit" msgstr "" msgid "Save" msgstr "" msgid "Reload" msgstr "" msgid "Copy" msgstr "" msgid "Paste" msgstr "" msgid "Chg Win" msgstr "" msgid "Import" msgstr "" msgid "Export" msgstr "" msgid "Go to" msgstr "" msgid "OtherCmd" msgstr "" msgid "Config" msgstr "" msgid "Redraw" msgstr "" msgid "Add Appt" msgstr "" msgid "Add Todo" msgstr "" msgid "-1 Day" msgstr "" msgid "+1 Day" msgstr "" msgid "-1 Week" msgstr "" msgid "+1 Week" msgstr "" msgid "-1 Month" msgstr "" msgid "+1 Month" msgstr "" msgid "-1 Year" msgstr "" msgid "+1 Year" msgstr "" msgid "Nxt View" msgstr "" msgid "Prv View" msgstr "" msgid "Today" msgstr "" msgid "Command" msgstr "" msgid "Right" msgstr "" msgid "Left" msgstr "" msgid "Down" msgstr "" msgid "Up" msgstr "" msgid "beg Week" msgstr "" msgid "end Week" msgstr "" msgid "Add Item" msgstr "" msgid "Del Item" msgstr "" msgid "Edit Itm" msgstr "" msgid "View" msgstr "" msgid "Pipe" msgstr "" msgid "Flag Itm" msgstr "" msgid "Repeat" msgstr "" msgid "EditNote" msgstr "" msgid "ViewNote" msgstr "" msgid "Prio.+" msgstr "" msgid "Prio.-" msgstr "" msgid "" "#\n" "# Calcurse keys configuration file\n" "#\n" "# This file sets the keybindings used by Calcurse.\n" "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n" "# To assign a keybinding to an action, this file must contain a line\n" "# with the following syntax:\n" "#\n" "# ACTION KEY1 KEY2 ... KEYn\n" "#\n" "# Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn\n" "# will be pressed.\n" "#\n" "# To define bindings which use the CONTROL key, prefix the key with 'C-'.\n" "# The escape, space bar and horizontal Tab key can be specified using\n" "# the 'ESC', 'SPC' and 'TAB' keyword, respectively.\n" "# Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords.\n" "# Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END'\n" "# keywords.\n" "#\n" "# A description of what each ACTION keyword is used for is available\n" "# from calcurse online configuration menu.\n" msgstr "" msgid "FATAL ERROR: could not create default keys file." msgstr "" msgid "FATAL ERROR: key value out of bounds" msgstr "" msgid "General" msgstr "" msgid "Layout" msgstr "" msgid "Sidebar" msgstr "" msgid "Color" msgstr "" msgid "Notify" msgstr "" msgid "Keys" msgstr "" msgid "Unknown" msgstr "" msgid "Cancel the ongoing action." msgstr "" msgid "Select the highlighted item." msgstr "" msgid "Print general information about calcurse's authors, license, etc." msgstr "" msgid "Display hints whenever some help screens are available." msgstr "" msgid "Exit from the current menu, or quit calcurse." msgstr "" msgid "Save calcurse data." msgstr "" msgid "Reload appointments and todo items." msgstr "" msgid "Copy the item that is currently selected." msgstr "" msgid "Paste an item at the current position." msgstr "" msgid "Select next panel in calcurse main screen." msgstr "" msgid "Import data from an external file." msgstr "" msgid "Export data to a new file format." msgstr "" msgid "Select the day to go to." msgstr "" msgid "Show next possible actions inside status bar." msgstr "" msgid "Enter the configuration menu." msgstr "" msgid "Redraw calcurse's screen." msgstr "" msgid "Add an appointment, whichever panel is currently selected." msgstr "" msgid "Add a todo item, whichever panel is currently selected." msgstr "" msgid "" "Move to previous day in calendar, whichever panel is currently selected." msgstr "" msgid "Move to next day in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous week in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next week in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous month in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next month in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous year in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next year in calendar, whichever panel is currently selected." msgstr "" msgid "Scroll window down (e.g. when displaying text inside a popup window)." msgstr "" msgid "Scroll window up (e.g. when displaying text inside a popup window)." msgstr "" msgid "Go to today, whichever panel is selected." msgstr "" msgid "Enter command mode." msgstr "" msgid "Move to the right." msgstr "" msgid "Move to the left." msgstr "" msgid "Move down." msgstr "" msgid "Move up." msgstr "" msgid "" "Select the first day of the current week when inside the calendar panel." msgstr "" msgid "Select the last day of the current week when inside the calendar panel." msgstr "" msgid "Add an item to the currently selected panel." msgstr "" msgid "Delete the currently selected item." msgstr "" msgid "Edit the currently seleted item." msgstr "" msgid "Display the currently selected item inside a popup window." msgstr "" msgid "Flag the currently selected item as important." msgstr "" msgid "Repeat an item" msgstr "" msgid "Pipe the currently selected item to an external program." msgstr "" msgid "Attach (or edit if one exists) a note to the currently selected item" msgstr "" msgid "View the note attached to the currently selected item." msgstr "" msgid "Raise a task priority inside the todo panel." msgstr "" msgid "Lower a task priority inside the todo panel." msgstr "" msgid "FATAL ERROR: null file pointer." msgstr "" #, c-format msgid "When adding default key for \"%s\", \"%s\" was already assigned!" msgstr "" msgid "xmalloc: zero size" msgstr "" msgid "xmalloc: out of memory" msgstr "" msgid "xcalloc: zero size" msgstr "" msgid "xcalloc: overflow" msgstr "" msgid "xcalloc: out of memory" msgstr "" msgid "xrealloc: zero size" msgstr "" msgid "xrealloc: overflow" msgstr "" msgid "xrealloc: out of memory" msgstr "" msgid "could not allocate memory to store block info" msgstr "" msgid "Block not found" msgstr "" #, c-format msgid "overflow at %s" msgstr "" #, c-format msgid "dbg_free: null pointer at %s" msgstr "" #, c-format msgid "block seems already freed at %s" msgstr "" #, c-format msgid "corrupt block header at %s" msgstr "" #, c-format msgid "corrupt block end at %s, (end = %u, should be %d)" msgstr "" msgid "---==== MEMORY BLOCK ====----------------\n" msgstr "" #, c-format msgid " id: %u\n" msgstr "" #, c-format msgid " size: %u\n" msgstr "" #, c-format msgid " allocated in: %s\n" msgstr "" msgid "-----------------------------------------\n" msgstr "" msgid "+------------------------------+\n" msgstr "" msgid "| calcurse memory usage report |\n" msgstr "" #, c-format msgid " number of calls: %u\n" msgstr "" #, c-format msgid " allocated blocks: %u\n" msgstr "" #, c-format msgid " unfreed blocks: %u\n" msgstr "" #, c-format msgid "Warning: could not open %s, Aborting..." msgstr "" msgid "error while launching command: could not fork" msgstr "" msgid "error while launching command" msgstr "" msgid "(if set to YES, notify-bar will be displayed)" msgstr "" msgid "(Format of the date to be displayed inside notify-bar)" msgstr "" msgid "(Format of the time to be displayed inside notify-bar)" msgstr "" msgid "" "(Warn user if an appointment is within next 'notify-bar_warning' seconds)" msgstr "" msgid "(Command used to notify user of an upcoming appointment)" msgstr "" msgid "(Notify all appointments instead of flagged ones only)" msgstr "" msgid "(Run in background to get notifications after exiting)" msgstr "" msgid "(Log activity when running in background)" msgstr "" msgid "Enter the time format (see 'man 3 strftime' for possible formats) " msgstr "" msgid "Enter the number of seconds (0 not to be warned before an appointment)" msgstr "" msgid "Enter the notification command " msgstr "" msgid "notification options" msgstr "" msgid "incoherent repetition type" msgstr "" msgid "unknown repetition type" msgstr "" msgid "unknown character" msgstr "" msgid "event not found" msgstr "" msgid "appointment not found" msgstr "" msgid "syntax error in item date" msgstr "" msgid "date error in item exception" msgstr "" #, c-format msgid "Could not remove calcurse lock file: %s\n" msgstr "" #, c-format msgid "Error setting signal #%d : %s\n" msgstr "" msgid "no note attached" msgstr "" msgid "no such todo" msgstr "" msgid "todo not found" msgstr "" msgid "ERROR setting first day of week" msgstr "" msgid "The day you entered is not valid" msgstr "" #, c-format msgid "Enter the day to go to [ENTER for today] : %s" msgstr "" msgid "Enter start time ([hh:mm] or [hhmm]):" msgstr "" msgid "Press [Enter] to continue" msgstr "" msgid "You entered an invalid time, should be [hh:mm] or [hhmm]" msgstr "" msgid "Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):" msgstr "" msgid "Invalid time: start time must be before end time!" msgstr "" msgid "Enter the new item description:" msgstr "" msgid "Enter the new repetition type:" msgstr "" msgid "(d)aily" msgstr "" msgid "(w)eekly" msgstr "" msgid "(m)onthly" msgstr "" msgid "(y)early" msgstr "" #, c-format msgid "(currently using %s)" msgstr "" msgid "[dwmy]" msgstr "" msgid "The frequence you entered is not valid." msgstr "" msgid "The entered date is not valid." msgstr "" #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition." msgstr "" msgid "Enter the new repetition frequence:" msgstr "" #, c-format msgid "Enter the new ending date: [%s] or '0'" msgstr "" msgid "Description" msgstr "" msgid "Repetition" msgstr "" msgid "Edit: " msgstr "" msgid "Start time" msgstr "" msgid "End time" msgstr "" msgid "Move" msgstr "" msgid "Pipe item to external command:" msgstr "" msgid "Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:" msgstr "" msgid "Enter description:" msgstr "" msgid "You entered an invalid start time, should be [hh:mm] or [hhmm]" msgstr "" msgid "" "Invalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], " "[+xxxdxxhxxm] or [+mm]" msgstr "" msgid "Do you really want to delete this item?" msgstr "" msgid "This item is recurrent. Delete (a)ll occurences or just this (o)ne?" msgstr "" msgid "[ao]" msgstr "" msgid "This item has a note attached to it. Delete (i)tem or just its (n)ote?" msgstr "" msgid "[in]" msgstr "" msgid "Enter the repetition type:" msgstr "" msgid "Enter the repetition frequence:" msgstr "" #, c-format msgid "Enter the ending date: [%s] or '0' for an endless repetition" msgstr "" #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition" msgstr "" msgid "This item is already a repeated one." msgstr "" msgid "Sorry, the date you entered is older than the item start time." msgstr "" msgid "wrong item type" msgstr "" msgid "Enter the new TODO item:" msgstr "" msgid "Enter the TODO priority [1 (highest) - 9 (lowest)]:" msgstr "" msgid "Do you really want to delete this task?" msgstr "" msgid "This item has a note attached to it. Delete (t)odo or just its (n)ote?" msgstr "" msgid "[tn]" msgstr "" msgid "Enter the new TODO description:" msgstr "" msgid "TODO:" msgstr "" msgid "/!\\ INTERNAL ERROR /!\\" msgstr "" msgid "Please report the following bug:" msgstr "" msgid "[yn]" msgstr "" msgid "Press any key to continue..." msgstr "" msgid "failure in mktime" msgstr "" msgid "error in mktime" msgstr "" msgid "yes" msgstr "" msgid "no" msgstr "" msgid "option not defined" msgstr "" #, c-format msgid "temporary file \"%s\" could not be created" msgstr "" #, c-format msgid "Error when closing file at %s" msgstr "" msgid "No note file found\n" msgstr "" msgid "January" msgstr "" msgid "February" msgstr "" msgid "March" msgstr "" msgid "April" msgstr "" msgid "May" msgstr "" msgid "June" msgstr "" msgid "July" msgstr "" msgid "August" msgstr "" msgid "September" msgstr "" msgid "October" msgstr "" msgid "November" msgstr "" msgid "December" msgstr "" msgid "Sun" msgstr "" msgid "Mon" msgstr "" msgid "Tue" msgstr "" msgid "Wed" msgstr "" msgid "Thu" msgstr "" msgid "Fri" msgstr "" msgid "Sat" msgstr "" msgid "mm/dd/yyyy" msgstr "" msgid "dd/mm/yyyy" msgstr "" msgid "yyyy/mm/dd" msgstr "" msgid "yyyy-mm-dd" msgstr "" msgid "unknown panel" msgstr "" msgid "Usage: calcurse-upgrade [-h|-v|--config ]" msgstr "" msgid "unrecognized option:" msgstr "" msgid "Configuration file not found:" msgstr "" msgid "Pre-3.0.0 configuration file format detected..." msgstr "" msgid "Create temporary backup of the configuration file..." msgstr "" msgid "Old backup file found:" msgstr "" msgid "" "\n" "If a previous conversion did not complete, please try to restore your\n" "configuration from this backup and then remove the backup file." msgstr "" msgid "done" msgstr "" msgid "Old temporary file found:" msgstr "" msgid "" "\n" "If a previous conversion did not complete, please try to remove this file " "and\n" "start over with a backup of your old configuration file." msgstr "" msgid "Upgrade configuration directives..." msgstr "" msgid "Remove temporary backup..." msgstr "" calcurse-4.0.0/po/fr.po0000644000175000017500000012777412472326722011653 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR calcurse Development Team # This file is distributed under the same license as the PACKAGE package. # # Translators: # esaule , 2011 # Lukas Fleischer , 2011 # lkppo, 2012 # tikismoke , 2014 # zorun , 2012 msgid "" msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: bugs@calcurse.org\n" "POT-Creation-Date: 2015-02-22 10:37+0100\n" "PO-Revision-Date: 2014-08-03 21:51+0000\n" "Last-Translator: Lukas Fleischer \n" "Language-Team: French (http://www.transifex.com/projects/p/calcurse/language/" "fr/)\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" msgid "null pointer" msgstr "Pointeur nul" msgid "date error in appointment" msgstr "erreur de date sur ce rendez-vous" msgid "no such appointment" msgstr "rendez-vous inconnu" msgid "" "Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" " [-c] [-D] [-S] [--status]\n" " [--read-only]\n" msgstr "" msgid "Try 'calcurse -h' for more information.\n" msgstr "Taper 'calcurse -h' pour plus d'informations.\n" #, fuzzy msgid "" "\n" "Copyright (c) 2004-2015 calcurse Development Team.\n" "This is free software; see the source for copying conditions.\n" msgstr "" "\n" "Copyright (c) 2004-2012 Équipe de développement de calcurse.\n" "Ceci est un logiciel libre ; consultez le code source pour connaître les\n" "conditions légales d'utilisation.\n" #, c-format msgid "Calcurse %s - text-based organizer\n" msgstr "Calcurse %s - organiseur personnel en mode texte\n" msgid "" "\n" "For more information, type '?' from within Calcurse, or read the manpage.\n" msgstr "" "\n" "Pour plus d'informations, tapez '?' dans Calcurse, ou lisez la page de " "manuel.\n" msgid "Mail feature requests and suggestions to .\n" msgstr "" "Vous pouvez envoyer vos remarques et suggestions à .\n" msgid "Mail bug reports to .\n" msgstr "Les rapports de bug sont à envoyer en anglais à .\n" msgid "" "\n" "Miscellaneous:\n" " -h, --help\n" "\tprint this help and exit.\n" "\n" " -v, --version\n" "\tprint calcurse version and exit.\n" "\n" " --status\n" "\tdisplay the status of running instances of calcurse.\n" "\n" " --read-only\n" "\tDon't save configuration nor appointments/todos. Use with care.\n" "\n" "Files:\n" " -c , --calendar \n" "\tspecify the calendar to use (has precedence over '-D').\n" "\n" " -D , --directory \n" "\tspecify the data directory to use.\n" "\tIf not specified, the default directory is ~/.calcurse\n" "\n" "Non-interactive:\n" " -a, --appointment\n" " \tprint events and appointments for current day and exit.\n" "\n" " -d , --day \n" "\tprint events and appointments for or upcoming days and\n" "\texit. To specify both a starting date and a range, use the\n" "\t'--startday' and the '--range' option.\n" "\n" " -g, --gc\n" "\trun the garbage collector for note files and exit. \n" "\n" " -i , --import \n" "\timport the icalendar data contained in . \n" "\n" " -n, --next\n" "\tprint next appointment within upcoming 24 hours and exit. Also given\n" "\tis the remaining time before this next appointment.\n" "\n" " -l , --limit \n" "\tonly print information regarding the next items. \n" "\n" " -r[num], --range[=num]\n" "\tprint events and appointments for the [num] number of days\n" "\tand exit. If no [num] is given, a range of 1 day is considered.\n" "\n" " -s[date], --startday[=date]\n" "\tprint events and appointments from [date] and exit.\n" "\tIf no [date] is given, the current day is considered.\n" "\n" " -S, --search=\n" "\tsearch for the given regular expression within events, appointments,\n" "\tand todos description.\n" "\n" " -t[num], --todo[=num]\n" "\tprint todo list and exit. If the optional number [num] is given,\n" "\tthen only todos having a priority equal to [num] will be returned.\n" "\tThe priority number must be between 1 (highest) and 9 (lowest).\n" "\tIt is also possible to specify '0' for the priority, in which case\n" "\tonly completed tasks will be shown.\n" "\n" " -x[format], --export[=format]\n" "\texport user data to the specified format. Events, appointments and\n" "\ttodos are converted and echoed to stdout.\n" "\tTwo possible formats are available: 'ical' and 'pcal'.\n" "\tIf the optional argument format is not given, ical format is\n" "\tselected by default.\n" "\tnote: redirect standard output to export data to a file,\n" "\tby issuing a command such as: calcurse --export > calcurse.dat\n" msgstr "" #, c-format msgid "" "Error: both calcurse (pid: %d) and its daemon (pid: %d)\n" "seem to be running at the same time!\n" "Please check manually and restart calcurse.\n" msgstr "" "Erreur : calcurse (PID : %d) et son démon (PID : %d)\n" "semblent s'exécuter en même temps !\n" "Veuillez verifier manuellement et relancer calcurse.\n" #, c-format msgid "calcurse is running (pid %d)\n" msgstr "Calcurse est lancé (PID %d)\n" #, c-format msgid "calcurse is running in background (pid %d)\n" msgstr "calcurse s'exécute est arrière-plan (PID %d)\n" msgid "calcurse is not running\n" msgstr "calcurse n'est pas en cours d'exécution\n" msgid "completed tasks:\n" msgstr "tâches terminées :\n" msgid "to do:\n" msgstr "" "à faire :\n" "\n" msgid "next appointment:\n" msgstr "prochain rendez-vous :\n" #, fuzzy, c-format msgid "invalid date: %s" msgstr "Délai invalide" #, c-format msgid "invalid range: %s" msgstr "" #, c-format msgid "invalid priority: %s" msgstr "" #, c-format msgid "invalid export format: %s" msgstr "" msgid "invalid filter mask" msgstr "" #, fuzzy msgid "cannot handle more than one regular expression" msgstr "Impossible d'utiliser plus d'une expression régulière." #, fuzzy, c-format msgid "could not compile regular expression: %s" msgstr "Impossible de compiler l'expression régulière." #, c-format msgid "invalid date range: %s" msgstr "" msgid "invalid argument combination" msgstr "" msgid "cannot specify a range and an end date" msgstr "" msgid "Export to (i)cal or (p)cal format?" msgstr "Exporter vers le format (i)cal ou (p)cal?" msgid "[ip]" msgstr "[ip]" msgid "Do you really want to quit?" msgstr "Voulez-vous vraiment quitter?" msgid "Command:" msgstr "Commande:" #, c-format msgid "Help topic does not exist: %s" msgstr "" #, c-format msgid "No such command: %s" msgstr "" msgid "unknown color" msgstr "couleur inconnue" msgid "failed to open configuration file" msgstr "impossible d'ouvrir le fichier de configuration" #, c-format msgid "invalid configuration directive: \"%s\"" msgstr "instruction de configuration invalide : \"%s\"" msgid "" "Pre-3.0.0 configuration file format detected, please upgrade running " "`calcurse-upgrade`." msgstr "" "Format de fichier de configuration pre-3.0.0 détecté,\n" "veuillez mettre à jour en lançant `calcurse-upgrade`." #, c-format msgid "configuration variable unknown: \"%s\"" msgstr "variable de configuration inconnue : \"%s\"" #, c-format msgid "wrong configuration variable format for \"%s\"" msgstr "format de variable de configuration incorrect pour \"%s\"" msgid "layout configuration" msgstr "Configuration de l'affichage" msgid "Foreground" msgstr "Premier plan" msgid "Background" msgstr "Arrière plan" msgid "(terminal's default)" msgstr "(valeurs par défaut du terminal)" msgid "color theme" msgstr "thème de couleur" msgid "(if set to YES, compact panels are used)" msgstr "" msgid "Calendar" msgstr "Calendrier" msgid "Appointments" msgstr "Rendez-vous" msgid "TODO" msgstr "" msgid "(specifies the panel that is selected by default)" msgstr "" msgid "(if set to YES, automatic save is done when quitting)" msgstr "" "(si fixé à OUI, une sauvegarde est automatiquement effectuée en quittant)" msgid "(run the garbage collector when quitting)" msgstr "(lance le ramasse-miettes en quittant)" msgid "(if not null, automatically save data every 'periodic_save' minutes)" msgstr "" "(enregistre automatiquement toutes les 'periodic_save' minutes, si non nul)" msgid "(if set to YES, confirmation is required before quitting)" msgstr "(si fixé à OUI, il est nécessaire de confirmer avant de quitter)" msgid "(if set to YES, confirmation is required before deleting an event)" msgstr "" "(si fixé à OUI, il est nécessaire de confirmer avant d'effacer un élément)" msgid "(if set to YES, messages about loaded and saved data will be displayed)" msgstr "" "(si fixé à OUI, les messages concernant le chargement et l'enregistrement " "des données seront affichés)" msgid "(if set to YES, progress bar will be displayed when saving data)" msgstr "" "(si fixé à OUI, la barre sera affichée lors de la sauvegarde des données)" msgid "Monday" msgstr "Lundi" msgid "Sunday" msgstr "Dimanche" msgid "(specifies the first day of week in the calendar view)" msgstr "(indique le premier jour de la semaine dans la vue de calendrier)" msgid "(Format of the date to be displayed in non-interactive mode)" msgstr "(Format de la date à afficher en mode non-interactif)" msgid "(Format to be used when entering a date: " msgstr "(Format utilisé pour saisir une date : " msgid "Enter an option number to change its value" msgstr "Saisir le numéro d'une option pour changer sa valeur" msgid "(Press '^P' or '^N' to move up or down, 'Q' to quit)" msgstr "" "(Utiliser '^P' ou '^N' pour se déplacer vers le haut ou le bas, et 'Q' pour " "quitter)" msgid "Enter the date format (see 'man 3 strftime' for possible formats) " msgstr "" "Saisir le format de date (voir 'man 3 strftime' pour les formats possibles)" msgid "Enter the date format: " msgstr "Saisir le format de date : " msgid "Enter the delay, in minutes, between automatic saves (0 to disable) " msgstr "" "Saisir le délai, en minutes, entre deux sauvegardes automatiques (0 pour " "désactiver)" msgid "general options" msgstr "options générales" msgid "Undefined option!" msgstr "Option inconnue !" msgid "undefined" msgstr "inconnue" msgid "keys configuration" msgstr "Configuration des raccourcis" msgid "Press the key you want to assign to:" msgstr "Pressez la touche que vous voulez assigner :" msgid "This key is not yet recognized by calcurse, please choose another one." msgstr "" "Cette touche n'est pas encore reconnue par calcurse, veuillez en choisir une " "autre." #, c-format msgid "This key is already in use for %s, please choose another one." msgstr "Cette touche est déjà utilisée pour %s, veuillez en choisir une autre." msgid "Some actions do not have any associated key bindings!" msgstr "Certaines actions n'ont pas de raccourcis clavier associés !" msgid "" "Sorry, colors are not supported by your terminal\n" "(Press [ENTER] to continue)" msgstr "" "Désolé, les couleurs ne sont pas prises en charge par votre terminal\n" "(Appuyer sur [ENTRÉE] pour continuer)" msgid "unknown item type" msgstr "type d'élément inconnu" msgid "Event:" msgstr "Evènemment:" msgid "Appointment:" msgstr "Rendez-vous:" #, c-format msgid "Could not stop daemon properly: %s\n" msgstr "Impossible d'arrêter le démon normalement : %s\n" #, c-format msgid "terminated at %s with signal %d\n" msgstr "arrêté à %s avec le signal %d\n" #, c-format msgid "Could not remove daemon lock file: %s\n" msgstr "Impossible de retirer le fichier verrou du démon : %s\n" #, c-format msgid "Could not fork: %s\n" msgstr "Impossible de forker : %s\n" #, c-format msgid "Could not detach from the controlling terminal: %s\n" msgstr "Impossible de se détacher du terminal appelant : %s\n" #, c-format msgid "Could not change working directory: %s\n" msgstr "impossible de changer le repertoire de travail : %s\n" msgid "Cannot daemonize, aborting\n" msgstr "Impossible de lancer le démon, annulation en cours\n" msgid "Could not set lock file\n" msgstr "Impossible de vérouiller le fichier\n" #, c-format msgid "Could not access \"%s\": %s\n" msgstr "Impossible d'accéder à \"%s\" : %s\n" #, c-format msgid "started at %s\n" msgstr "démarré à %s\n" msgid "error loading next appointment\n" msgstr "erreur de chargement du rendez-vous suivant\n" #, c-format msgid "launching notification at %s for: \"%s\"\n" msgstr "lancement de la notification à %s pour : \"%s\"\n" msgid "error while sending notification\n" msgstr "erreur durant l'envoi de la notification\n" #, c-format msgid "sleeping at %s for %d second\n" msgid_plural "sleeping at %s for %d seconds\n" msgstr[0] "endormi à %s pour %d seconde\n" msgstr[1] "endormi à %s pour %d secondes\n" #, c-format msgid "awakened at %s\n" msgstr "réveillé à %s\n" #, c-format msgid "Could not stop calcurse daemon: %s\n" msgstr "Impossible d'arrêter le démon calcurse : %s\n" msgid "date error in event" msgstr "date erronée dans l'événement" msgid "date error in the event\n" msgstr "erreur dans la date de l'événement\n" msgid "Internal error: line too long" msgstr "Erreur interne : ligne trop longue" msgid "out of memory" msgstr "dépassement de mémoire" msgid "unknown ical type" msgstr "type ical inconnu" msgid "recurrence frequence not found." msgstr "la fréquence de répétition introuvable." msgid "recurrence frequence not recognized." msgstr "la fréquence de répétition non reconnue." msgid "recurrence rule malformed." msgstr "règle de répétition mal formée." msgid "recurrence exception dates malformed." msgstr "dates d'exception de répétition mal formées." msgid "could not get entire item description." msgstr "impossible de trouver la description entière de l'élément." msgid "description malformed." msgstr "description mal formée." msgid "appointment has no start time." msgstr "rendez-vous sans date de début." msgid "could not compute duration (no end time)." msgstr "impossible de calculer la durée (pas de date de fin)." msgid "item has a negative duration." msgstr "l'élément a une durée négative." msgid "event date is not defined." msgstr "la date de l'événement n'est pas définie." msgid "item could not be identified." msgstr "l'élément n'a pu être identifié." msgid "could not retrieve item summary." msgstr "impossible de récupérer le résumé de l'événement." msgid "could not retrieve event start time." msgstr "impossible de récupérer l'heure de début de l'événement." msgid "could not retrieve event end time." msgstr "impossible de récupérer l'heure de fin de l'événement." msgid "item duration malformed." msgstr "durée de l'élément mal formée." msgid "The ical file seems to be malformed. The end of item was not found." msgstr "" "Le fichier ical semble mal formé. La fin de l'élément n'a pas été trouvée." msgid "item priority is not acceptable (must be between 1 and 9)." msgstr "" "La priorité de l'élément est illégale (doit être compris entre 1 et 9)." msgid "Warning: ical header malformed or wrong version number. Aborting..." msgstr "" "Attention : l'en-tête ical est mal formé ou le numéro de version est " "mauvais. Abandon…" msgid "Saving..." msgstr "Enregistrement…" msgid "Loading..." msgstr "Chargement…" msgid "Exporting..." msgstr "Exportation…" msgid "Internal error while displaying progress bar" msgstr "" "Une erreur interne s'est produite durant l'affichage de la barre de " "progression" msgid "Choose the file used to export calcurse data:" msgstr "Choisir le fichier vers lequel exporter les données :" msgid "The file cannot be accessed, please enter another file name." msgstr "" "Le fichier ne peut être ouvert, veuillez saisir un autre nom de fichier." msgid "Press [ENTER] to continue." msgstr "Appuyer sur [ENTRÉE] pour continuer." #, c-format msgid "Failed to open \"%s\", - %s\n" msgstr "Impossible d'ouvrir \"%s\", - %s\n" msgid "Failed to build message\n" msgstr "Impossible de construire le message\n" #, c-format msgid "Failed to print message \"%s\"\n" msgstr "Echec lors de l'affichage du message \"%s\"\n" #, c-format msgid "Failed to close \"%s\" - %s\n" msgstr "Impossible de fermer \"%s\" - %s\n" #, c-format msgid "%s does not exist" msgstr "" msgid "Problems accessing data file ..." msgstr "Problème d'accès aux fichiers de données…" msgid "The data files were successfully saved" msgstr "Les fichiers de données ont été correctement enregistrées" msgid "Press [ENTER] to continue" msgstr "Appuyer sur [ENTRÉE] pour continuer" msgid "failed to open appointment file" msgstr "impossible d'ouvrir le fichier des rendez-vous" msgid "syntax error in the item date" msgstr "erreur de syntaxe sur la date de l'élément" msgid "no event nor appointment found" msgstr "aucun événement ni rendez-vous trouvé" msgid "syntax error in item time or duration" msgstr "erreur de syntaxe pour l'heure ou la durée de l'élément" msgid "syntax error in item identifier" msgstr "erreur de syntaxe dans le nom de l'élément" msgid "wrong format in the appointment or event" msgstr "format incorrect du rendez-vous ou de l'événement" msgid "syntax error in item repetition" msgstr "erreur de syntaxe pour la répétition de l'élément" msgid "failed to open todo file" msgstr "impossible d'ouvrir le fichier des tâches" msgid "The data files were reloaded successfully" msgstr "" msgid "There are unsaved modifications:" msgstr "" msgid "(d)iscard" msgstr "" msgid "(m)erge" msgstr "" msgid "(k)eep and cancel" msgstr "" msgid "[dmk]" msgstr "" msgid "failed to open key file" msgstr "impossible d'ouvrir le fichier des raccourcis clavier" msgid "" "\n" "Too many errors while reading configuration file!\n" "Please backup your keys file, remove it from directory, and launch calcurse " "again.\n" msgstr "" "\n" "Trop d'erreurs à la lecture du fichier de configuration !\n" "Veuillez faire une sauvegarde votre fichier de raccourcis, et le supprimer " "du répertoire, puis relancer calcurse.\n" msgid "Could not read key label" msgstr "Impossible de lire le libellé de la touche" msgid "Key label not recognized" msgstr "Libellé de la touche non reconnu" #, c-format msgid "Error reading key: \"%s\"" msgstr "Erreur de lecture de la touche : \"%s\"" #, c-format msgid "\"%s\" assigned multiple times!" msgstr "\"%s\" est assignée plusieurs fois !" msgid "There were some errors when loading keys file, see log file?" msgstr "" msgid "Too many errors while reading keys file, aborting..." msgstr "" "Trop d'erreurs durant la lecture du fichier de raccourcis, annulation..." #, c-format msgid "FATAL ERROR: could not create %s: %s\n" msgstr "ERREUR FATALE : impossible de créer %s : %s\n" msgid "Welcome to Calcurse. Missing data files were created." msgstr "Bienvenue dans Calcurse. Les fichiers manquants ont été créés." msgid "Data files found. Data will be loaded now." msgstr "" "Fichiers de données trouvés. Les données seront chargées immédiatement." msgid "The data were successfully exported" msgstr "Les données ont été correctement exportées" msgid "unknown export type" msgstr "type d'exportation inconnu" msgid "wrong export mode" msgstr "mode d'exportation incorrect" msgid "Enter the file name to import data from:" msgstr "Saisir le nom du fichier depuis lequel importer les données :" #, c-format msgid "Import process report: %04d lines read" msgstr "" msgid "unknown import type" msgstr "type d'importation inconnu" msgid "FATAL ERROR: the input file cannot be accessed, Aborting..." msgstr "ERREUR FATALE : le fichier d'entrée n'a pu être ouvert, abandon..." msgid "FATAL ERROR: wrong import mode" msgstr "ERREUR FATALE : mode d'importation erroné" #, c-format msgid "%d app" msgid_plural "%d apps" msgstr[0] "%d app" msgstr[1] "%d apps" #, c-format msgid "%d event" msgid_plural "%d events" msgstr[0] "%d événement" msgstr[1] "%d événements" #, c-format msgid "%d todo" msgid_plural "%d todos" msgstr[0] "%d tâche" msgstr[1] "%d tâches" #, c-format msgid "%d skipped" msgstr "%d ignorés" msgid "Some items could not be imported, see log file?" msgstr "" msgid "Warning: could not open temporary log file, Aborting..." msgstr "Attention : impossible d'ouvrir le journal temporaire, abandon..." msgid "Warning: could not create temporary log file, Aborting..." msgstr "" "Attention : impossible de créer un journal temporaire, abandon en cours..." msgid "No log file to display!" msgstr "Aucun journal à afficher !" #, c-format msgid "Warning: could not erase temporary log file %s, Aborting..." msgstr "Attention : impossible d'effacer le journal temporaire %s, Abandon..." msgid "Invalid delay" msgstr "Délai invalide" #, c-format msgid "" "\n" "WARNING: it seems that another calcurse instance is already running.\n" "If this is not the case, please remove the following lock file: \n" "\"%s\"\n" "and restart calcurse.\n" msgstr "" "\n" "ATTENTION : il semble qu'une autre instance de calcurse soit en cours " "d'exécution.\n" "Si ce n'est pas le cas, veuillez supprimer le fichier de verrouillage " "suivant :\n" "\"%s\"\n" "et relancer calcurse.\n" msgid "Cancel" msgstr "" msgid "Select" msgstr "Sélectionner" msgid "Credits" msgstr "" msgid "Help" msgstr "Aide" msgid "Quit" msgstr "Quitter" msgid "Save" msgstr "Enregistrer" msgid "Reload" msgstr "" msgid "Copy" msgstr "" msgid "Paste" msgstr "Coller" msgid "Chg Win" msgstr "Chg.Fen." msgid "Import" msgstr "Importer" msgid "Export" msgstr "Exporter" msgid "Go to" msgstr "Aller à" msgid "OtherCmd" msgstr "Autres" msgid "Config" msgstr "Configurer" msgid "Redraw" msgstr "Rafraîchir" msgid "Add Appt" msgstr "Ajt rdv" msgid "Add Todo" msgstr "Ajt tâche" msgid "-1 Day" msgstr "-1 Jour" msgid "+1 Day" msgstr "+1 Jour" msgid "-1 Week" msgstr "-1 Sem." msgid "+1 Week" msgstr "+1 Sem." msgid "-1 Month" msgstr "-1 Mois" msgid "+1 Month" msgstr "+1 Mois" msgid "-1 Year" msgstr "-1 An" msgid "+1 Year" msgstr "+1 An" msgid "Nxt View" msgstr "Voir Suiv." msgid "Prv View" msgstr "Voir Prec." msgid "Today" msgstr "Aujourd." msgid "Command" msgstr "" msgid "Right" msgstr "Droite" msgid "Left" msgstr "Gauche" msgid "Down" msgstr "Bas" msgid "Up" msgstr "Haut" msgid "beg Week" msgstr "Déb Sem." msgid "end Week" msgstr "Fin Sem." msgid "Add Item" msgstr "Ajouter" msgid "Del Item" msgstr "Supprimer" msgid "Edit Itm" msgstr "Modifier" msgid "View" msgstr "Voir" msgid "Pipe" msgstr "Tube" msgid "Flag Itm" msgstr "Marq rdv" msgid "Repeat" msgstr "Répéter" msgid "EditNote" msgstr "EditNote" msgid "ViewNote" msgstr "VoirNote" msgid "Prio.+" msgstr "Prio.+" msgid "Prio.-" msgstr "Prio.-" msgid "" "#\n" "# Calcurse keys configuration file\n" "#\n" "# This file sets the keybindings used by Calcurse.\n" "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n" "# To assign a keybinding to an action, this file must contain a line\n" "# with the following syntax:\n" "#\n" "# ACTION KEY1 KEY2 ... KEYn\n" "#\n" "# Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn\n" "# will be pressed.\n" "#\n" "# To define bindings which use the CONTROL key, prefix the key with 'C-'.\n" "# The escape, space bar and horizontal Tab key can be specified using\n" "# the 'ESC', 'SPC' and 'TAB' keyword, respectively.\n" "# Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords.\n" "# Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END'\n" "# keywords.\n" "#\n" "# A description of what each ACTION keyword is used for is available\n" "# from calcurse online configuration menu.\n" msgstr "" "#\n" "# Fichier de configuration des raccourcis de Calcurse\n" "#\n" "# Ce fichier définie les raccourcis clavier utilisés par Calcurse.\n" "# Les lignes débutant par \"#\" sont des commentaires ignorés par Calcurse.\n" "# Pour assigner un raccourci clavier à une action, ce fichier doit contenir " "une ligne\n" "# qui respecte la syntaxe suivante :\n" "#\n" "# ACTION TOUCHE1 TOUCHE2 ... TOUCHEn\n" "#\n" "# Où ACTION désigne la commande à exécuter lorsque TOUCHE1, TOUCHE2, ..., ou " "TOUCHEn\n" "# est pressée.\n" "#\n" "# Pour définir un raccourci utilisant la touche CONTRÔLE, préfixer la touche " "avec 'C-'.\n" "# Les touches échap, espace et tabulation horizontale peuvent être " "spécifiées en utilisant\n" "# les mots clefs respectifs ESC, SPC et TAB.\n" "# Les touches fléchées peuvent aussi être spécifiées avec les mots clefs UP, " "DWN, LFT, RGT.\n" "# Enfin les touches Début et Fin peuvent être assignées en utilisant les " "mots clefs KEY_HOME et KEY_END.\n" "#\n" "# Une description de ce que chaque ACTION fait est disponible\n" "# dans le menu de configuration de calcurse.\n" msgid "FATAL ERROR: could not create default keys file." msgstr "" "ERREUR FATALE : impossible de créer le fichier de raccourcis par défaut." msgid "FATAL ERROR: key value out of bounds" msgstr "ERREUR FATALE : valeur de clef hors limite" msgid "General" msgstr "Général" msgid "Layout" msgstr "Écran" msgid "Sidebar" msgstr "Barre latérale" msgid "Color" msgstr "Couleur" msgid "Notify" msgstr "Notifier" msgid "Keys" msgstr "Raccourcis" msgid "Unknown" msgstr "" msgid "Cancel the ongoing action." msgstr "Annuler l'action en cours." msgid "Select the highlighted item." msgstr "Sélectionner l'élément en surbrillance." msgid "Print general information about calcurse's authors, license, etc." msgstr "" "Afficher les informations générales à propos des auteurs de calcurse, de la " "licence, etc." msgid "Display hints whenever some help screens are available." msgstr "" "Afficher des notes chaque fois que certains écrans d'aide sont disponibles." msgid "Exit from the current menu, or quit calcurse." msgstr "Fermer le menu courant, ou quitter calcurse." msgid "Save calcurse data." msgstr "Enregistre les données de calcurse." msgid "Reload appointments and todo items." msgstr "" msgid "Copy the item that is currently selected." msgstr "" msgid "Paste an item at the current position." msgstr "Coller un élément à la position actuelle." msgid "Select next panel in calcurse main screen." msgstr "Sélectionner le panneau suivant dans l'écran général de calcurse." msgid "Import data from an external file." msgstr "Importer les données d'un fichier externe." msgid "Export data to a new file format." msgstr "Exporter les données vers un nouveau format de fichier." msgid "Select the day to go to." msgstr "Sélectionner le jour à afficher." msgid "Show next possible actions inside status bar." msgstr "Afficher l'action suivante possible dans la barre d'état." msgid "Enter the configuration menu." msgstr "Ouvrir le menu de configuration." msgid "Redraw calcurse's screen." msgstr "Rafraîchir l'écran de calcurse." msgid "Add an appointment, whichever panel is currently selected." msgstr "Ajouter un rendez-vous, quel que soit le panneau actif." msgid "Add a todo item, whichever panel is currently selected." msgstr "Ajouter une tâche, quel que soit le panneau actif." msgid "" "Move to previous day in calendar, whichever panel is currently selected." msgstr "" "Se déplacer au jour précédent du calendrier, quel que soit le panneau actif." msgid "Move to next day in calendar, whichever panel is currently selected." msgstr "" "Se déplacer au jour suivant du calendrier, quel que soit le panneau actif." msgid "" "Move to previous week in calendar, whichever panel is currently selected" msgstr "" "Se déplacer à la semaine précédente du calendrier, quel que soit le panneau " "actif." msgid "Move to next week in calendar, whichever panel is currently selected." msgstr "" "Se déplacer à la semaine suivante du calendrier, quel que soit le panneau " "actif." msgid "" "Move to previous month in calendar, whichever panel is currently selected" msgstr "" "Se déplacer au mois précédent du calendrier, quel que soit le panneau actif." msgid "Move to next month in calendar, whichever panel is currently selected." msgstr "" "Se déplacer au mois suivant du calendrier, quel que soit le panneau actif." msgid "" "Move to previous year in calendar, whichever panel is currently selected" msgstr "" "Se déplacer à l'année précédent du calendrier, quel que soit le panneau " "actif." msgid "Move to next year in calendar, whichever panel is currently selected." msgstr "" "Se déplacer à l'année suivante du calendrier, quel que soit le panneau actif." msgid "Scroll window down (e.g. when displaying text inside a popup window)." msgstr "" "Faire défiler l'écran vers le bas (p. ex. lors de l'affichage du texte dans " "une fenêtre indépendante)." msgid "Scroll window up (e.g. when displaying text inside a popup window)." msgstr "" "Faire défiler l'écran vers le haut (p. ex. lors de l'affichage du texte dans " "une fenêtre indépendante)." msgid "Go to today, whichever panel is selected." msgstr "Aller à la date du jour, quel que soit le panneau actif." msgid "Enter command mode." msgstr "" msgid "Move to the right." msgstr "Vers la droite." msgid "Move to the left." msgstr "Vers la gauche." msgid "Move down." msgstr "Vers le bas." msgid "Move up." msgstr "Vers le haut." msgid "" "Select the first day of the current week when inside the calendar panel." msgstr "" "Sélectionner le premier jour de la semaine en cours lors de l'affichage du " "calendrier." msgid "Select the last day of the current week when inside the calendar panel." msgstr "" "Sélectionner le dernier jour de la semaine en cours lors de l'affichage du " "calendrier." msgid "Add an item to the currently selected panel." msgstr "Ajouter un élément au panneau sélectionné." msgid "Delete the currently selected item." msgstr "Supprimer l'élément sélectionné." msgid "Edit the currently seleted item." msgstr "Modifier l'élément sélectionné." msgid "Display the currently selected item inside a popup window." msgstr "Afficher l'élément sélectionner dans une fenêtre indépendante." msgid "Flag the currently selected item as important." msgstr "Marquer l'élément sélectionné comme important." msgid "Repeat an item" msgstr "Répéter un élément" msgid "Pipe the currently selected item to an external program." msgstr "Passer l'élément sélectionné à un programme externe." msgid "Attach (or edit if one exists) a note to the currently selected item" msgstr "Joindre (ou modifier si elle existe) une note à l'élément sélectionné" msgid "View the note attached to the currently selected item." msgstr "Consulter la note jointe à l'élément sélectionné." msgid "Raise a task priority inside the todo panel." msgstr "Augmenter la priorité d'une tâche dans le panneau des tâches." msgid "Lower a task priority inside the todo panel." msgstr "Diminuer la priorité d'une tâche dans le panneau des tâches." msgid "FATAL ERROR: null file pointer." msgstr "ERREUR FATALE : pointeur de fichier nul." #, c-format msgid "When adding default key for \"%s\", \"%s\" was already assigned!" msgstr "" "Pendant l'ajout de la touche par défaut pour \"%s\", \"%s\" était déjà " "assignée !" msgid "xmalloc: zero size" msgstr "xmalloc : taille nulle" msgid "xmalloc: out of memory" msgstr "xmalloc : dépassement de mémoire" msgid "xcalloc: zero size" msgstr "xcalloc : taille nulle" msgid "xcalloc: overflow" msgstr "xcalloc : débordement" msgid "xcalloc: out of memory" msgstr "xcalloc : dépassement de mémoire" msgid "xrealloc: zero size" msgstr "xrealloc : taille nulle" msgid "xrealloc: overflow" msgstr "xrealloc : débordement" msgid "xrealloc: out of memory" msgstr "xrealloc : dépassement de mémoire" msgid "could not allocate memory to store block info" msgstr "" "impossible d'allouer de la mémoire pour stocker les informations du bloc" msgid "Block not found" msgstr "Bloc introuvable" #, c-format msgid "overflow at %s" msgstr "débordement à l'adresse %s" #, c-format msgid "dbg_free: null pointer at %s" msgstr "dbg_free : pointeur nulle à l'adresse %s" #, c-format msgid "block seems already freed at %s" msgstr "le bloc semble déjà libéré à l'adresse %s" #, c-format msgid "corrupt block header at %s" msgstr "début de bloc corrompu à l'adresse %s" #, c-format msgid "corrupt block end at %s, (end = %u, should be %d)" msgstr "fin de bloc corrompu à l'adresse %s, (fin = %u, devrait être %d)" msgid "---==== MEMORY BLOCK ====----------------\n" msgstr "---==== BLOC MÉMOIRE ====----------------\n" #, c-format msgid " id: %u\n" msgstr " id : %u\n" #, c-format msgid " size: %u\n" msgstr " taille : %u\n" #, c-format msgid " allocated in: %s\n" msgstr " alloué en : %s\n" msgid "-----------------------------------------\n" msgstr "-----------------------------------------\n" msgid "+------------------------------+\n" msgstr "+------------------------------+\n" msgid "| calcurse memory usage report |\n" msgstr "| rapport de consommation mémoire de calcurse |\n" #, c-format msgid " number of calls: %u\n" msgstr " nombre d'appels : %u\n" #, c-format msgid " allocated blocks: %u\n" msgstr " blocs alloués : %u\n" #, c-format msgid " unfreed blocks: %u\n" msgstr " blocs non libérés : %u\n" #, c-format msgid "Warning: could not open %s, Aborting..." msgstr "Attention : impossible d'ouvrir %s, abandon..." msgid "error while launching command: could not fork" msgstr "erreur pendant le lancement de la commande : fork impossible" msgid "error while launching command" msgstr "erreur durant le lancement de la commande" msgid "(if set to YES, notify-bar will be displayed)" msgstr "(si fixé à OUI, la barre de notification sera affichée)" msgid "(Format of the date to be displayed inside notify-bar)" msgstr "(Format de la date à afficher dans la barre de notification)" msgid "(Format of the time to be displayed inside notify-bar)" msgstr "(Format de l'heure à afficher dans la barre de notification)" msgid "" "(Warn user if an appointment is within next 'notify-bar_warning' seconds)" msgstr "" "(Alerte l'utilisateur si un rendez-vous se produit les prochaines 'notify-" "bar_warning' secondes)" msgid "(Command used to notify user of an upcoming appointment)" msgstr "" "(Commande utilisée pour prévenir l'utilisateur d'un rendez-vous sur le point " "de commencer)" msgid "(Notify all appointments instead of flagged ones only)" msgstr "" "(Signaler tous les rendez-vous au lieu de se restreindre à ceux marqués " "comme important)" msgid "(Run in background to get notifications after exiting)" msgstr "" "(Lancer en arrière-plan pour obtenir les notifications après avoir quitter)" msgid "(Log activity when running in background)" msgstr "(Enregistrer l'activité lors de l'exécution en arrière-plan)" msgid "Enter the time format (see 'man 3 strftime' for possible formats) " msgstr "" "Saisir le format de l'heure (voir 'man 3 strftime' pour les formats " "possibles)" msgid "Enter the number of seconds (0 not to be warned before an appointment)" msgstr "" "Saisir le nombre de secondes (0 pour désactiver l'alerte qui précéde un " "rendez-vous)" msgid "Enter the notification command " msgstr "Saisir la commande de notification" msgid "notification options" msgstr "options de notification" msgid "incoherent repetition type" msgstr "type de répétition incohérent" msgid "unknown repetition type" msgstr "type de répétition inconnu" msgid "unknown character" msgstr "caractère inconnu" msgid "event not found" msgstr "événement introuvable" msgid "appointment not found" msgstr "rendez-vous introuvable" msgid "syntax error in item date" msgstr "erreur de syntaxe dans la date de l'élément" msgid "date error in item exception" msgstr "" #, c-format msgid "Could not remove calcurse lock file: %s\n" msgstr "Impossible d'effacer le fichier verrou de calcurse : %s\n" #, c-format msgid "Error setting signal #%d : %s\n" msgstr "Erreur d'affectation du signal #%d : %s\n" msgid "no note attached" msgstr "aucune note jointe" msgid "no such todo" msgstr "tâche inconnue" msgid "todo not found" msgstr "tâche introuvable" msgid "ERROR setting first day of week" msgstr "ERREUR de saisie du premier jour de la semaine" #, fuzzy msgid "The day you entered is not valid" msgstr "La fréquence que vous avez saisie n'est pas valide." #, c-format msgid "Enter the day to go to [ENTER for today] : %s" msgstr "" "Saisir le jour auquel vous souhaitez vous rendre [ou simplement ENTRÉE pour " "aujourd'hui] : %s" msgid "Enter start time ([hh:mm] or [hhmm]):" msgstr "" msgid "Press [Enter] to continue" msgstr "Appuyer sur [ENTRÉE] pour continuer" msgid "You entered an invalid time, should be [hh:mm] or [hhmm]" msgstr "" msgid "Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):" msgstr "" msgid "Invalid time: start time must be before end time!" msgstr "" "Heure invalide : l'heure de début doit être antérieure à l'heure de fin !" msgid "Enter the new item description:" msgstr "Saisir la description du nouvel élément :" msgid "Enter the new repetition type:" msgstr "Saisir le nouveau type de répétition :" msgid "(d)aily" msgstr "quotidien (d)" msgid "(w)eekly" msgstr "hebdomadaire (w)" msgid "(m)onthly" msgstr "(m)ensuel" msgid "(y)early" msgstr "annuel (y)" #, c-format msgid "(currently using %s)" msgstr "(actuellement : %s)" msgid "[dwmy]" msgstr "[dwmy]" msgid "The frequence you entered is not valid." msgstr "La fréquence que vous avez saisie n'est pas valide." msgid "The entered date is not valid." msgstr "La date saisie n'est pas valide." #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition." msgstr "Les formats possibles sont [%s] ou '0' pour une répétition non bornée." msgid "Enter the new repetition frequence:" msgstr "Saisir la nouvelle fréquence de répétition :" #, c-format msgid "Enter the new ending date: [%s] or '0'" msgstr "Saisir la nouvelle date de fin : [%s] ou '0'" msgid "Description" msgstr "Description" msgid "Repetition" msgstr "Répétition" msgid "Edit: " msgstr "Modifier :" msgid "Start time" msgstr "Heure de début" msgid "End time" msgstr "Heure de fin" msgid "Move" msgstr "Déplacer" msgid "Pipe item to external command:" msgstr "Passer un élément à une commande externe :" msgid "Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:" msgstr "" msgid "Enter description:" msgstr "" msgid "You entered an invalid start time, should be [hh:mm] or [hhmm]" msgstr "" msgid "" "Invalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], " "[+xxxdxxhxxm] or [+mm]" msgstr "" msgid "Do you really want to delete this item?" msgstr "" msgid "This item is recurrent. Delete (a)ll occurences or just this (o)ne?" msgstr "" msgid "[ao]" msgstr "[tc]" msgid "This item has a note attached to it. Delete (i)tem or just its (n)ote?" msgstr "" msgid "[in]" msgstr "[en]" msgid "Enter the repetition type:" msgstr "Saisir le type de répétition :" msgid "Enter the repetition frequence:" msgstr "Saisir la fréquence de répétition :" #, c-format msgid "Enter the ending date: [%s] or '0' for an endless repetition" msgstr "Saisir la date de fin : [%s] ou '0' pour répéter indéfiniment" #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition" msgstr "Les formats autorisés sont [%s] ou '0' pour répéter indéfiniment" msgid "This item is already a repeated one." msgstr "Cet élément est déjà répétitif." msgid "Sorry, the date you entered is older than the item start time." msgstr "" "Désolé, la date saisie est antérieure à la date de début de l'élément !" msgid "wrong item type" msgstr "type d'élément incorrect" msgid "Enter the new TODO item:" msgstr "" msgid "Enter the TODO priority [1 (highest) - 9 (lowest)]:" msgstr "" msgid "Do you really want to delete this task?" msgstr "" msgid "This item has a note attached to it. Delete (t)odo or just its (n)ote?" msgstr "" msgid "[tn]" msgstr "[tn]" msgid "Enter the new TODO description:" msgstr "" msgid "TODO:" msgstr "A FAIRE:" msgid "/!\\ INTERNAL ERROR /!\\" msgstr "/!\\ ERREUR INTERNE /!\\" msgid "Please report the following bug:" msgstr "Merci de reporter le bogue suivant :" msgid "[yn]" msgstr "[on]" msgid "Press any key to continue..." msgstr "Presser une touche pour continuer..." msgid "failure in mktime" msgstr "erreur fatale dans mktime" msgid "error in mktime" msgstr "erreur dans mktime" msgid "yes" msgstr "oui" msgid "no" msgstr "non" msgid "option not defined" msgstr "option non définie" #, c-format msgid "temporary file \"%s\" could not be created" msgstr "le fichier temporaire \"%s\" n'a pas pu être crée" #, c-format msgid "Error when closing file at %s" msgstr "Erreur lors de la fermeture du fichier à %s" msgid "No note file found\n" msgstr "Fichier de note introuvable\n" msgid "January" msgstr "Janvier" msgid "February" msgstr "Février" msgid "March" msgstr "Mars" msgid "April" msgstr "Avril" msgid "May" msgstr "Mai" msgid "June" msgstr "Juin" msgid "July" msgstr "Juillet" msgid "August" msgstr "Août" msgid "September" msgstr "Septembre" msgid "October" msgstr "Octobre" msgid "November" msgstr "Novembre" msgid "December" msgstr "Décembre" msgid "Sun" msgstr "Dim" msgid "Mon" msgstr "Lun" msgid "Tue" msgstr "Mar" msgid "Wed" msgstr "Mer" msgid "Thu" msgstr "Jeu" msgid "Fri" msgstr "Ven" msgid "Sat" msgstr "Sam" msgid "mm/dd/yyyy" msgstr "mm/dd/yyyy" msgid "dd/mm/yyyy" msgstr "dd/mm/yyyy" msgid "yyyy/mm/dd" msgstr "yyyy/mm/dd" msgid "yyyy-mm-dd" msgstr "yyyy-mm-dd" msgid "unknown panel" msgstr "panneau inconnu" msgid "Usage: calcurse-upgrade [-h|-v|--config ]" msgstr "Utilisation : calcurse-upgrade [-h|-v|--config ]" msgid "unrecognized option:" msgstr "option non reconnue :" msgid "Configuration file not found:" msgstr "Fichier de configuration introuvable :" msgid "Pre-3.0.0 configuration file format detected..." msgstr "Format de fichier de configuration pre-3.0.0 détécté..." msgid "Create temporary backup of the configuration file..." msgstr "Création d'une sauvegarde temporaire du fichier de configuration..." msgid "Old backup file found:" msgstr "Ancien fichier de sauvegarde trouvé :" msgid "" "\n" "If a previous conversion did not complete, please try to restore your\n" "configuration from this backup and then remove the backup file." msgstr "" "\n" "Si une précédente conversion n'a pas fonctionné, vous pouvez essayer\n" "de réparer votre configuration à partir de cette sauvegarde, puis de\n" "supprimer la sauvegarde." msgid "done" msgstr "fait" msgid "Old temporary file found:" msgstr "Ancien fichier temporaire trouvé :" msgid "" "\n" "If a previous conversion did not complete, please try to remove this file " "and\n" "start over with a backup of your old configuration file." msgstr "" "\n" "Si une conversion précédente ne s'est pas terminée, veuillez essayer\n" "de supprimer ce fichier et recommencer avec une sauvegarde de\n" "votre ancien fichier de configuration." msgid "Upgrade configuration directives..." msgstr "Mise à jour des instructions de configuration..." msgid "Remove temporary backup..." msgstr "Suppression de la sauvegarde temporaire..." #~ msgid "Argument to the '-d' flag is not valid\n" #~ msgstr "L'argument de l'option '-d' n'est pas valide\n" #~ msgid "Possible argument format are: '%s' or 'n'\n" #~ msgstr "Format possible de l'argument : '%s' ou 'n'\n" #~ msgid "Argument is not valid\n" #~ msgstr "L'argument n'est pas valide\n" #~ msgid "Argument format for -s and --startday is: '%s'\n" #~ msgstr "Le format de l'argument pour -s ou --startday est : '%s'\n" #~ msgid "Argument format for -r and --range is: 'n'\n" #~ msgstr "La syntaxe des arguments -r et --range est : 'n'\n" #~ msgid "Argument for '-x' should be either 'ical' or 'pcal'\n" #~ msgstr "L'argument pour '-x' doit être soit 'ical' soit 'pcal'\n" #~ msgid "" #~ "Option '-S' must be used with either '-d', '-r', '-s', '-a' or '-t'\n" #~ msgstr "" #~ "L'option '-S' doit être utilisée avec '-d', '-r', '-d', '-a', ou '-t'\n" #~ msgid "aborting...\n" #~ msgstr "annulation…\n" #~ msgid "%s successfully created\n" #~ msgstr "%s correctement créé\n" #~ msgid "starting interactive mode...\n" #~ msgstr "lancement du mode interactif…\n" #~ msgid "" #~ "The day you entered is not valid (should be between 01/01/1902 and " #~ "12/31/2037)" #~ msgstr "" #~ "Le jour que vous avez saisi n'est pas valide (il devrait être compris " #~ "entre le 01/01/1902 et le 31/12/2037)" calcurse-4.0.0/po/boldquot.sed0000644000175000017500000000033112472330401013172 00000000000000s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g s/“/“/g s/â€/â€/g s/‘/‘/g s/’/’/g calcurse-4.0.0/po/de.gmo0000644000175000017500000011113612472330423011752 00000000000000Þ•œ !K‘!‡Ý!†e"†ì"¢s#$*$>$U$i$€$—$Xµ$(( 0(;(8L(<…(6Â(6ù()0))Z)6„)4»)6ð)I'*q*†*DŽ*5Ó*B +9L+G†+-Î+@ü+ =,)G,6q,¨,½,Æ,!Ï,ñ,ø,- -*-*<-g-n-w--‡-ž-§-°-7¹-:ñ-,,. Y. f.s.Dy.¾. Å.Ð.#à./ /(/D/-L/z/€/ˆ/‘/˜/¶/)»/å/'03(0\0p0(‰0&²0Ù0#ò0#14:1*o1š1£1#¬1 Ð17Ü1:2'O2'w2Ÿ2»2À2à2 é2 333*#3N3Ga3G©3%ñ334K4Bi4¬4-Ä4Dò4<75(t55½5&Ö5ý5#6A6`6F€6Ç6ç6B7E7]7|7‰š7$8-+8Y8!`8"‚8 ¥8%²80Ø8$ 9.9;N9Š9©9Â9Ý9ø9::.(: W:b:f:n:)t:ž:£:Á:"È:,ë:; 6;VD;1›;Í;Õ;Ú;ß;ø;ý;< <,<)A<>k<ª<°<´<¸< ¿<DÊ<F=EV=Eœ=Hâ=I+>Hu>H¾>??,?5?M?a?u?|?…?Ž?–?­?Ç?Ð?&Ö?ý?@8!@ Z@:{@;¶@Xò@/KA{A•A°AÊA$çAA BNBUB \B}B†B,‹B¸B¿BÙBôBûB CCCC$C 8CEBCCˆCÌC*ÓCþCHD`DG}D ÅD-ÏDýD5E/;ELkE>¸E ÷EFF FF&F#?FcF<‚F'¿FCçF$+G=PGFŽGÕGÙG4ßG(H=HAHSH#VHÖzH/QII6†I½I9ÆI;J'WK8–KÏKÔKÛKàKåKêKïKL$L4L=L]LvL+”L ÀLÌL$ÞL1M5M-PM)~M&¨M"ÏM$òM N8NRNfNN œN§N¾NÃNÌNÜNüN-O!HOjO…O•O!µO×OïOPP*P%EPkP‰P¢P:ÀPûP'Q6Q KQVQiQlQ‹QœQ °Q½Q ÒQßQ òQR%R5R$URzR<•RÒRáRûRS%;SaS(S ¨SÉSÑS àSêS üS TT0TDT VTdT|T,‘T¾T(ÐTùT U U2UEU\UoU‡UšU®U ²U ½U!ÈU¶êUG¡WŸéWª‰X«4YžàYZ“Z©ZÁZÕZìZ["[>^S^m^~^@•^=Ö^3_:H_&ƒ_?ª_5ê_< `G]`F¥`ì` a?a<NaR‹aAÞaU b<vbE³b ùb:c;@c|c™c ¨c!´cÖcÝcæcïc*÷c*"dMdTd]dfdnd ~d ‹d –d8£d7Üd7eLeTe\eRbeµe ¼eÈe-Ýe ff&/fVf4_f”fšf¡f ©f#µfÙf'âf g/%g0Ug!†g&¨g'Ïg.÷g&h+Dh"ph6“h-Êhøhi' i 2i5?i5ui.«i-Úi+j4j-;jij(xj ¡j ­j ºj8ÆjÿjQk[hk,Äk8ñk*l5Jl€l@—lRØl4+m#`m„m¤m&¼m%ãm n %n FnDgn(¬nÕn+ðn o=o#Zo~o p.p Ep*Qp*|p §p.µpKäp>0q#oqB“q%Öq$üq!!rCr'cr‹r “r4Ÿr Ôràr ärîr5ör,s2s Qs*]s7ˆs%ÀsæsgþsCftªt±t¶t»tÛtâtétït2÷t8*u5cu™uŸu£u§u®uJ¿uL vLWvK¤vHðvJ9wJ„wIÏwx*x j~ ©~6³~ ê~,÷~I$Wn5Æ ü €€ € #€01€'b€$Š€U¯€+D19v@°=ñ/‚3‚79‚9q‚«‚¯‚È‚)Í‚ê÷‚4⃄-„ M„:X„>“„*Ò„:ý„D8…}…8…Kº…]†Wd†¼†Á†Ȇ͆Ò†׆܆ø†‡ !‡&.‡U‡ s‡/”‡ ćЇ&ä‡7 ˆCˆ4aˆ+–ˆ(ˆ*ëˆ,‰2C‰v‰‰#¦‰ʉ ç‰ò‰ Š ŠŠ(.Š)WŠ@Š(Š#늋!'‹2I‹-|‹#ª‹΋å‹ þ‹(Œ"HŒkŒ ŠŒ5«ŒáŒ(óŒ 1<O"Twޤ"» ÞêŽ Ž&1Ž XŽyŽ™Ž@²ŽóŽ!<%^„0£Ô ðû 1B[p‰°Í0à‘1'‘Y‘s‘Ž‘¡‘³‘Αà‘ü‘’#’ &’ 1’!<’nþ+‹|Xa iS„ Y–æH(GˆbT\tÅÄÌ: 5mgŽlRµx!Jb¤Šë/TQê†ç…I{>¶Ü(Zï3ºv´}`fùzD ³à¡áÞMÒZ, e~®r•@øË2k»sLuy]0nŒ¾KŸa…o²Û‚ú¢*AP+°Í? ðÑÏÊ "Úy9¥Ôû¨ "íN¬c1ýpAÁö¯¹N2±­Hc€6k[_ßX½ƒ”ÃlÉ=ÀõV))’üÈâ4Æ|‡`·$%qô$ˆ\¼#of§W^BKEÝh'{rJCÖWœ&i j%d;—Eå*QvUI:5„Š‹ž4Øu!× ©-šó‘.› M™ìO'D}d8FÕ#Œ>ãpBxñS]t¦3Óq÷Îh_OYeòª€è†¿7‡,&;7/U‰8?@«0˜ÇŽ‚zÙÿ9j=<CL“¸w ƒ^1[géP6-~ä‰RÐFwGVsî£.m< For more information, type '?' from within Calcurse, or read the manpage. If a previous conversion did not complete, please try to remove this file and start over with a backup of your old configuration file. If a previous conversion did not complete, please try to restore your configuration from this backup and then remove the backup file. Too many errors while reading configuration file! Please backup your keys file, remove it from directory, and launch calcurse again. WARNING: it seems that another calcurse instance is already running. If this is not the case, please remove the following lock file: "%s" and restart calcurse. id: %u size: %u unfreed blocks: %u allocated in: %s number of calls: %u allocated blocks: %u "%s" assigned multiple times!# # Calcurse keys configuration file # # This file sets the keybindings used by Calcurse. # Lines beginning with "#" are comments, and ignored by Calcurse. # To assign a keybinding to an action, this file must contain a line # with the following syntax: # # ACTION KEY1 KEY2 ... KEYn # # Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn # will be pressed. # # To define bindings which use the CONTROL key, prefix the key with 'C-'. # The escape, space bar and horizontal Tab key can be specified using # the 'ESC', 'SPC' and 'TAB' keyword, respectively. # Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords. # Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END' # keywords. # # A description of what each ACTION keyword is used for is available # from calcurse online configuration menu. %d app%d apps%d event%d events%d skipped%d todo%d todos(Command used to notify user of an upcoming appointment)(Format of the date to be displayed in non-interactive mode)(Format of the date to be displayed inside notify-bar)(Format of the time to be displayed inside notify-bar)(Format to be used when entering a date: (Log activity when running in background)(Notify all appointments instead of flagged ones only)(Press '^P' or '^N' to move up or down, 'Q' to quit)(Run in background to get notifications after exiting)(Warn user if an appointment is within next 'notify-bar_warning' seconds)(currently using %s)(d)aily(if not null, automatically save data every 'periodic_save' minutes)(if set to YES, automatic save is done when quitting)(if set to YES, confirmation is required before deleting an event)(if set to YES, confirmation is required before quitting)(if set to YES, messages about loaded and saved data will be displayed)(if set to YES, notify-bar will be displayed)(if set to YES, progress bar will be displayed when saving data)(m)onthly(run the garbage collector when quitting)(specifies the first day of week in the calendar view)(terminal's default)(w)eekly(y)early+------------------------------+ +1 Day+1 Month+1 Week+1 Year----------------------------------------- ---==== MEMORY BLOCK ====---------------- -1 Day-1 Month-1 Week-1 Year/!\ INTERNAL ERROR /!\Add ApptAdd ItemAdd TodoAdd a todo item, whichever panel is currently selected.Add an appointment, whichever panel is currently selected.Add an item to the currently selected panel.Appointment:AppointmentsAprilAttach (or edit if one exists) a note to the currently selected itemAugustBackgroundBlock not foundCalcurse %s - text-based organizer CalendarCancel the ongoing action.Cannot daemonize, aborting Chg WinChoose the file used to export calcurse data:ColorCommandCommand:ConfigConfiguration file not found:CopyCopy the item that is currently selected.Could not access "%s": %s Could not change working directory: %s Could not detach from the controlling terminal: %s Could not fork: %s Could not read key labelCould not remove calcurse lock file: %s Could not remove daemon lock file: %s Could not set lock file Could not stop calcurse daemon: %s Could not stop daemon properly: %s Create temporary backup of the configuration file...Data files found. Data will be loaded now.DecemberDel ItemDelete the currently selected item.DescriptionDisplay hints whenever some help screens are available.Display the currently selected item inside a popup window.Do you really want to delete this item?Do you really want to delete this task?Do you really want to quit?DownERROR setting first day of weekEdit ItmEdit the currently seleted item.Edit: EditNoteEnd timeEnter an option number to change its valueEnter description:Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:Enter start time ([hh:mm] or [hhmm]):Enter the TODO priority [1 (highest) - 9 (lowest)]:Enter the configuration menu.Enter the date format (see 'man 3 strftime' for possible formats) Enter the date format: Enter the day to go to [ENTER for today] : %sEnter the delay, in minutes, between automatic saves (0 to disable) Enter the ending date: [%s] or '0' for an endless repetitionEnter the file name to import data from:Enter the new TODO description:Enter the new TODO item:Enter the new ending date: [%s] or '0'Enter the new item description:Enter the new repetition frequence:Enter the new repetition type:Enter the notification command Enter the number of seconds (0 not to be warned before an appointment)Enter the repetition frequence:Enter the repetition type:Enter the time format (see 'man 3 strftime' for possible formats) Error reading key: "%s"Error setting signal #%d : %s Error when closing file at %sError: both calcurse (pid: %d) and its daemon (pid: %d) seem to be running at the same time! Please check manually and restart calcurse. Event:Exit from the current menu, or quit calcurse.ExportExport data to a new file format.Export to (i)cal or (p)cal format?Exporting...FATAL ERROR: could not create %s: %s FATAL ERROR: could not create default keys file.FATAL ERROR: key value out of boundsFATAL ERROR: null file pointer.FATAL ERROR: the input file cannot be accessed, Aborting...FATAL ERROR: wrong import modeFailed to build message Failed to close "%s" - %s Failed to open "%s", - %s Failed to print message "%s" FebruaryFlag ItmFlag the currently selected item as important.ForegroundFriGeneralGo toGo to today, whichever panel is selected.HelpHelp topic does not exist: %sImportImport data from an external file.Internal error while displaying progress barInternal error: line too longInvalid delayInvalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], [+xxxdxxhxxm] or [+mm]Invalid time: start time must be before end time!JanuaryJulyJuneKey label not recognizedKeysLayoutLeftLoading...Lower a task priority inside the todo panel.Mail bug reports to . Mail feature requests and suggestions to . MarchMayMonMondayMove down.Move to next day in calendar, whichever panel is currently selected.Move to next month in calendar, whichever panel is currently selected.Move to next week in calendar, whichever panel is currently selected.Move to next year in calendar, whichever panel is currently selected.Move to previous day in calendar, whichever panel is currently selected.Move to previous month in calendar, whichever panel is currently selectedMove to previous week in calendar, whichever panel is currently selectedMove to previous year in calendar, whichever panel is currently selectedMove to the left.Move to the right.Move up.No log file to display!No note file found No such command: %sNotifyNovemberNxt ViewOctoberOld backup file found:Old temporary file found:OtherCmdPastePaste an item at the current position.PipePipe item to external command:Pipe the currently selected item to an external program.Please report the following bug:Possible formats are [%s] or '0' for an endless repetitionPossible formats are [%s] or '0' for an endless repetition.Pre-3.0.0 configuration file format detected, please upgrade running `calcurse-upgrade`.Pre-3.0.0 configuration file format detected...Press [ENTER] to continuePress [ENTER] to continue.Press [Enter] to continuePress any key to continue...Press the key you want to assign to:Print general information about calcurse's authors, license, etc.Prio.+Prio.-Problems accessing data file ...Prv ViewQuitRaise a task priority inside the todo panel.RedrawRedraw calcurse's screen.Remove temporary backup...RepeatRepeat an itemRepetitionRightSatSaveSave calcurse data.Saving...Scroll window down (e.g. when displaying text inside a popup window).Scroll window up (e.g. when displaying text inside a popup window).SelectSelect next panel in calcurse main screen.Select the day to go to.Select the first day of the current week when inside the calendar panel.Select the highlighted item.Select the last day of the current week when inside the calendar panel.SeptemberShow next possible actions inside status bar.SidebarSome actions do not have any associated key bindings!Some items could not be imported, see log file?Sorry, colors are not supported by your terminal (Press [ENTER] to continue)Sorry, the date you entered is older than the item start time.Start timeSunSundayTODOTODO:The data files were successfully savedThe data were successfully exportedThe entered date is not valid.The file cannot be accessed, please enter another file name.The frequence you entered is not valid.The ical file seems to be malformed. The end of item was not found.This item is already a repeated one.This key is already in use for %s, please choose another one.This key is not yet recognized by calcurse, please choose another one.ThuTodayToo many errors while reading keys file, aborting...Try 'calcurse -h' for more information. TueUndefined option!UpUpgrade configuration directives...Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]] [-d |] [-s[date]] [-r[range]] [-c] [-D] [-S] [--status] [--read-only] Usage: calcurse-upgrade [-h|-v|--config ]ViewView the note attached to the currently selected item.ViewNoteWarning: could not create temporary log file, Aborting...Warning: could not erase temporary log file %s, Aborting...Warning: could not open %s, Aborting...Warning: could not open temporary log file, Aborting...Warning: ical header malformed or wrong version number. Aborting...WedWelcome to Calcurse. Missing data files were created.When adding default key for "%s", "%s" was already assigned!You entered an invalid start time, should be [hh:mm] or [hhmm]You entered an invalid time, should be [hh:mm] or [hhmm][ao][dwmy][in][ip][tn][yn]appointment has no start time.appointment not foundawakened at %s beg Weekblock seems already freed at %scalcurse is not running calcurse is running (pid %d) calcurse is running in background (pid %d) color themecompleted tasks: configuration variable unknown: "%s"corrupt block end at %s, (end = %u, should be %d)corrupt block header at %scould not allocate memory to store block infocould not compute duration (no end time).could not get entire item description.could not retrieve event end time.could not retrieve event start time.could not retrieve item summary.date error in appointmentdate error in eventdate error in the event dbg_free: null pointer at %sdd/mm/yyyydescription malformed.doneend Weekerror in mktimeerror loading next appointment error while launching commanderror while launching command: could not forkerror while sending notification event date is not defined.event not foundfailed to open appointment filefailed to open configuration filefailed to open key filefailed to open todo filefailure in mktimegeneral optionsincoherent repetition typeinvalid configuration directive: "%s"item could not be identified.item duration malformed.item has a negative duration.item priority is not acceptable (must be between 1 and 9).keys configurationlaunching notification at %s for: "%s" layout configurationmm/dd/yyyynext appointment: nono event nor appointment foundno note attachedno such appointmentno such todonotification optionsnull pointeroption not definedout of memoryoverflow at %srecurrence exception dates malformed.recurrence frequence not found.recurrence frequence not recognized.recurrence rule malformed.sleeping at %s for %d second sleeping at %s for %d seconds started at %s syntax error in item datesyntax error in item identifiersyntax error in item repetitionsyntax error in item time or durationsyntax error in the item datetemporary file "%s" could not be createdterminated at %s with signal %d to do: todo not foundundefinedunknown characterunknown colorunknown export typeunknown ical typeunknown import typeunknown item typeunknown panelunknown repetition typeunrecognized option:wrong configuration variable format for "%s"wrong export modewrong format in the appointment or eventwrong item typexcalloc: out of memoryxcalloc: overflowxcalloc: zero sizexmalloc: out of memoryxmalloc: zero sizexrealloc: out of memoryxrealloc: overflowxrealloc: zero sizeyesyyyy-mm-ddyyyy/mm/dd| calcurse memory usage report | Project-Id-Version: calcurse Report-Msgid-Bugs-To: bugs@calcurse.org POT-Creation-Date: 2015-02-22 10:37+0100 PO-Revision-Date: 2014-08-03 21:51+0000 Last-Translator: Lukas Fleischer Language-Team: German (http://www.transifex.com/projects/p/calcurse/language/de/) Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Für nähere Informationen bitte '?' drücken oder die manpage lesen! Falls eine vorige Konvertierung fehlschlug, bitte versuchen Sie, diese Datei zu entfernen und mit einem Backup Ihrer alten Konfigurationsdatei neu zu starten. Falls eine vorige Konvertierung fehlschlug, bitte versuchen Sie, die Konfiguration von diesem Backup wiederherzustellen und die Backup- Datei anschließend zu entfernen. Zu viele Fehler beim Lesen der Konfigurationsdatei! Bitte die Einstellungsdatei der Tastaturkürzel sichern, diese aus dem Verzeichnis löschen und calcurse neu starten. WARNUNG Scheinbar läuft eine weitere Instanz von calcurse schon. Wenn das nicht der Fall ist, bitte die Sperrdatei löschen: "%s" und calcurse neu starten. id: %u Größe: %u belegte Blöcke: %u alloziiert bei: %s Anzahl Aufrufe: %u alloziierte Blöcke: %u "%s" ist mehrfach zugeordnet# # Calcurse-Tastenkonfiguration # # Diese Datei definiert die Tastenkürzel für Calcurse. # Mit "#" beginnende Zeilen sind Kommentare und werden ignoriert. # Um eine Taste einer Aktion zuzuweisen, muss folgende Syntax # verwendet werden: # # AKTION TASTE1 TASTE2 ... TASTEn # # Wobei AKTION ausgeführt wird, wenn TASTE1, TASTE2, ... oder TASTEn # gedrückt wird. # # Um die STRG-Taste zu verwenden, kann der Taste 'C-' vorangestellt werden. # Die Escape-, Leer- und Tab-Tasten können durch die Schlüsselwörter # 'ESC', 'SPC' und 'TAB' verwendet werden. # Pfeiltasten entsprechend mit UP, DWN, LFT, RGT. # 'KEY_HOME' und 'KEY_END' entsprechen den Pos1- und Ende-Tasten. # # Eine Beschreibung jedes AKTION-Schlüsselwortes findet man im # Online-Konfigurationsmenü von calcurse. %d Termin%d Termine%d Ereignis%d Ereignisse%d übersprungen%d Aufgabe%d Aufgaben(Befehl um Benutzer auf einen bevorstehenden Termin hinzuweisen)(Datumsformatierung innerhalb der nicht-interaktiven Ansicht)(Datumsformat innerhalb der Benachrichtigungszeile)(Uhrzeitformatierung innerhalb der Benachrichtigungszeile)(Format für die Eingabe eines Datums)(Aufzeichnen von Aktivitäten, wenn im Hintergrund ausgeführt)(Benachrichtige alle Termine, anstelle nur markierte)(^P oder ^N drücken zum hoch/runter bewegen, Q zum Beenden)(Im Hintergrund laufen, um Benachrichtigungen zu bekommen nach Beenden)(Nutzer auf einen Termin innerhalb der nächsten n Sekunden hinweisen)(verwende momentan %s)(t)äglich(Wenn nicht '0' eingegeben ist wird alle N Minuten gespeichert)(Ist JA gewählt, wird beim Beenden automatisch gespeichert)(Ist JA gewählt, ist eine Bestätigung erforderlich, um ein Ereignis zu löschen)(Ist JA gewählt, ist eine Bestätigung erforderlich zum Beenden)(Ist JA gewählt, werden Nachrichten über geladene und gespeicherte Daten angezeigt)(Ist JA gewählt, wird die Benachrichtigungszeile angezeigt)(Ist JA gewählt, werden Fortschrittsbalken beim Speichern angezeigt)(m)onatlich(automatische Speicherbereinigung beim Beenden ausführen)(lege den ersten Tag der Woche in der Kalenderansicht fest)(Standartwert des Terminals)(w)öchentlich(j)ährlich+------------------------------+ +1 Tag+1 Monat+1 Woche+1 Jahr----------------------------------------- ---==== SPEICHERBLOCK ===---------------- -1 Tag-1 Monat-1 Woche-1 JahrINTERNER FEHLERNeuer TerminNeueintragNeue AufgabeErstelle Aufgabe, je nach aktuell ausgewähltem Fenster.Erstelle Termin, je nach aktuell ausgewähltem Fenster.Füge ein Item zum aktuell ausgewählten Fenster hinzu.Termin:TermineAprilNotiz an aktuell ausgewähltes Item anhängen (oder existierende Notiz bearbeiten)AugustHintergrundBlock nicht gefundenCalcurse %s - textbasierender Terminkalender KalenderAktuelle Aktion abbrechen.Kann nicht als Dienst laufen. Abbruch WechselnWählen Sie die Datei in die exportiert werden soll:FarbeBefehlBefehl:EinstellungKonfigurationsdatei nicht gefunden:KopierenDas aktuell ausgewählte Item kopieren.Kein Zugriff auf "%s": %s Kann das Arbeitsverzeichnis nicht wechseln: %s Kann das Programm nicht vom Terminal lösen: %s Kann Befehl nicht ausführen: %s Kann die Tastenbezeichnung nicht lesenKann die Sperrdatei nicht löschen: %s Kann Sperrdatei des Dienst nicht löschen: %s Kann keine Sperrdatei setzen Kann den calcurse dienst nicht beenden: %s Kann den Dienst nicht beenden: %s Erstelle temporäres Backup der Konfigurationsdatei...Benutzerdaten gefunden. Daten werden geladen.DezemberLöschenEntferne das aktuell ausgewählte Item.BeschreibungZeige Hinweise, wenn Hilfebilschirme verfügbar sind.Zeige das aktuell ausgewählte Item in einem Fenster.Möchten Sie diesen Eintrag wirklich löschen?Möchten Sie diese Aufgabe wirklich löschen?Möchten Sie das Programm wirklich beenden?RunterFEHLER beim Einstellen des ersten Wochentags.Eintrag bearb.Bearbeite das aktuell ausgewählte Item.Bearbeiten:Notiz bearb.End-UhrzeitNummer eingeben um den Wert zu ändern [Q um zu beenden]Beschreibung eingeben:Enduhrzeit ([hh:mm], [hhmm]) oder Termindauer ([+hh:mm], [+xxxdxxhxxm]) eingeben:Startuhrzeit eingeben [(hh:mm] oder [hhmm]) oder freilassen für ein ganztägiges Ereignis:Startuhrzeit eingeben ([hh:mm] oder [hhmm]):Priorität der Aufgabe [1 (höchste) - 9 (niedrigste)] :Öffne das Konfigurationsmenü.Geben Sie das Datumsformat an (vgl. 'man 3 strftime')Datumsformat eingeben:Zu welchem Tag soll gesprungen werden? [EINGABE für heute] : %sZeitraum für die automatische Speicherung in Minuten eingeben (0 zum Ausschalten)Ende der Wiederholung: [%s] oder '0' für unendlich.Dateiname zum Importieren eingeben:Beschreibung der neuen Aufgabe:Neue Aufgabe eingeben: Neues Enddatum eingeben: [%s] oder '0'Geben Sie eine neue Beschreibung ein:Neue Wiederholung eingeben:Neuen Wiederholungstyp eingeben:Befehl für die BenachrichtigungGeben Sie die Zeit in Sekunden ein (0 um keine Hinweis zu erhalten).Geben Sie das Wiederholungsintervall an:Wiederholungstyp eingeben:Zeitformat eingeben (vgl. 'man 3 strftime')Fehler beim Lesen der Taste "%s"Fehler bei Signal: #%d : %s Fehler beim schließen der Datei %sFehler: calcurse (PID %d) und der Dienst (PID %d) scheinen zur gleichen Zeit zu laufen! Bitte überprüfen Sie das und starten calcurse neu. Ereignis:Verlasse aktuelles Menü oder beende calcurse.ExportierenExportiere Daten in ein neues Dateiformat.In (i)cal- oder (p)cal-Format exportieren?Exportiere...SCHWERER FEHLER Konnte %s nicht erstellen: %s SCHWERER FEHLER: konnte Default-Tastaturkonfigurationsdatei nicht erzeugen.SCHWERER FEHLER: Tastenwert außerhalb des gültigen BereichesSCHWERER FEHLER: Null-Datei-Zeiger.SCHWERER FEHLER Eingabedatei kann nicht gelesen werden. Abbruch...SCHWERER FEHLER Falsches ExportformatFehler beim Erstellen der Nachricht Fehler beim Schließen "%s" - %s Fehler beim öffnen "%s", - %s Fehler beim Drucken der Nachricht "%s" FebruarEigenschaftDas aktuell ausgewählte Item als wichtig markieren.Vordergrund FrAllgemeinGehe zuGehe zum heutigen Tag, je nach ausgewähltem Fenster.HilfeHilfethema existiert nicht: %sImportierenImportiere Daten von einer externen Datei.Interner Fehler beim Darstellen des FortschrittsbalkensINTERNER FEHLER Die Zeile ist zu langUngültige VerzögerungUngültige End-Uhrzeit/Dauer; sollte im Format [hh:mm], [hhmm], [+hh:mm], [+xxxdxxhxxm] oder [+mm] seinUngültige Zeitangabe: Der Startzeitpunkt muss vor dem Ende liegen!JanuarJuliJuniTastenbezeichnung nicht bekanntTastenLayoutLinksLade...Verringere Aufgaben-Priorität im Aufgabenfenster.Bitte melden Sie Programmfehler an . Bitte melden Sie Vorschläge an . MärzMai MoMontagGehe nach unten.Gehe zum nächsten Tag im Kalender, je nach aktuell ausgewähltem Fenster.Gehe zum nächsten Monat im Kalender, je nach aktuell ausgewähltem Fenster.Gehe zur nächsten Woche im Kalender, je nach aktuell ausgewähltem Fenster.Gehe zum nächsten Jahr im Kalender, je nach aktuell ausgewähltem Fenster.Gehe zum vorigen Tag im Kalender, je nach aktuell ausgewähltem Fenster.Gehe zum vorigen Monat im Kalender, je nach aktuell ausgewähltem Fenster.Gehe zur vorigen Woche im Kalender, je nach aktuell ausgewähltem Fenster.Gehe zum vorigen Jahr im Kalender, je nach aktuell ausgewähltem Fenster.Gehe nach links.Gehe nach rechts.Nach oben.Keine Logdatei zum ansehen vorhanden!Notiz nicht gefunden Unbekannter Befehl: %sBenachrichtigungNovemberWeiterOktoberAlte Backup-Datei gefunden:Alte temporäre Datei gefunden:Zus. BefehleEinfügenItem an aktueller Position einfügen.WeiterleitenLeite an externen Befehl weiter:Das aktuell ausgewählte Item in ein externes Programm weiterleiten.Bitte den Programmfehler melden:Mögliche Eingaben sind [%s] oder '0' für unendlich.Mögliche Formate sind [%s] oder '0' für Endloswiederholung.Prä-3.0.0-Konfigurationsdateiformat entdeckt, bitte aktualisieren Sie calcurse mit `calcurse-upgrade`.Prä-3.0.0-Konfigurationsdateiformat entdeckt...[EINGABE]-Taste um fortzufahren[EINGABE] um fortzufahren.[EINGABE]-Taste um fortzufahrenEine beliebige Taste um fortzufahren...Taste drücken, die zugewiesen werden soll:Zeige generelle Informationen über die calcurse-Authoren, -Lizenz, etc.Prio.+Prio.-Probleme beim Zugriff auf Benutzerdaten ...ZurückBeendenErhöhe Aufgaben-Priorität im Aufgabenfenster.Neu aufbauenZeichne den calcurse-Bildschirm neu.Entferne temporäres Backup...WiederholenEin Item wiederholenWiederholungRechts SaSpeichernSpeichere calcurse-Daten.Speichere...Scrolle Fenster nach unten (z.B. beim Anzeigen von Text in einem Fenster).Scrolle Fenster nach oben (z.B. beim Anzeigen von Text in einem Fenster).AuswahlWähle nächstes Fenster im calcurse-Hauptbildschirm.Wähle den Tag, zu dem gesprungen werden soll.Wähle den ersten Tag der aktuellen Woche im Kalenderfenster.Wähle das hervorgehobene Item.Wähle den letzten Tag der aktuellen Woche im Kalenderfenster.SeptemberZeige nächste mögliche Aktionen in der Statusleiste.SeitenleisteEinige Aktionen haben keine Tastenzuordnung!Einige Einträge konnten nicht importiert werden; Logdatei jetzt ansehen?Farben werden von diesem Terminal nicht unterstützt. ([EINGABE]-Taste um fortzufahren)Das eingegebene Datum liegt vor dem Anfangszeitpunkt.Start-Uhrzeit SoSonntagZu erledigenZu erledigen:Die Benutzerdaten wurden erfolgreich gespeichertDie Daten wurden erfolgreich exportiertDas eingegebene Datum ist ungültig.Auf die Datei kann nicht zugegriffen werden, bitte einen anderen Dateinamen eingeben.Das eingegebene Wiederholung ist ungültig.Die ICal Datei ist fehlerhaft. Keine Enddatum des Eintrags gefunden.Es handelt sich bereits um einen wiederkehrenden Eintrag.Diese Taste ist schon mit %s belegt, bitte andere Taste wählen.Diese Taste kennt calcurse nicht, bitte andere Taste wählen. DoHeuteZu viele Fehler beim Lesen der 'keys'-Datei, Abbruch...Geben Sie 'calcurse -h' ein, für weitere Informationen. DiUnbestimmte Einstellung!HochAktualisiere Konfigurationsanweisungen...Verwendung: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]] [-d |] [-s[date]] [-r[range]] [-c] [-D] [-S] [--status] [--read-only] Verwendung: calcurse-upgrade [-h|-v|--config ]AnsichtNotiz zum aktuell ausgewählten Item ansehen.Notiz anz.WARNUNG Kann keine temporäre Logdatei anlegen. Abbruch...WARNUNG Kann temporäre Logdatei %s nicht löschen. Abbruch...WARNUNG: Kann %s nicht öffnen. Abbruch...WARNUNG Kann temporäre Logdatei nicht öffnen. Abbruch...WARNUNG ICal Kopf fehlerhaft oder falsche Versionsnummer. Abbruch... MiWillkommen zu calcurse. Fehlende Dateien werden erzeugt.Beim Hinzufügen einer Default-Taste für "%s" war "%s" bereits zugewiesen!Sie haben eine ungültige Start-Uhrzeit eingegeben, sollte im Format [hh:mm] oder [hhmm] seinSie haben eine ungültige Uhrzeit eingegeben, sollte im Format [hh:mm] oder [hhmm] sein[ae][twmj][in][ip][an][jn]Termin hat keine Startzeit.Termin nicht gefundenAufgeweckt als %s WochenanfangBlock scheint schon bei %s freigegebencalcurse ist nicht gestartet calcurse ist gestartet (PID %d) calcurse ist im Hintergrund gestartet (PID %d) FarbtabelleBeendete Aufgaben: Konfigurationsvariable unbekannt: "%s"Korruptes Block-Ende bei %s (Ende = %u, sollte %d sein)Korrupter Block-Header bei %skonnte kein Speicher für die Block-Info alloziierenKann Dauer nicht berechnen (keine Endzeit).Kann nicht die ganze Beschreibung lesen.Kann die Endzeit des Ereignis nicht lesen.Kann die Startzeit des Ereignis nicht lesen.Kann die Zusammenfassung des Eintrags nicht lesen.Datumsfehler im TerminDatumsfehler im EreignisFehlerhafte Zeit für das Ereignis dbg_free: Null-Zeiger bei %stt/mm/jjjjBeschreibung Fehlerhaft.fertigWochenendeFehler in mktimeFehler beim Laden des nächsten Termins Fehler beim Ausführen einer BefehlszeileFehler beim Ausführen einer Befehlszeile: Kann nicht AusführenFehler beim senden der Benachrichtigung Ereignisdatum ist nicht eingegeben.Ereignis nicht gefundenkonnte Termin-Datei nicht öffnenKonfigurationsdatei konnte nicht geöffnet werden.Konnte Tasenkonfigurationsdatei nicht öffnenkonnte Aufgaben-Datei nicht öffnenFehlfunktion in mktimeAllgemeine EinstellungenUnzusammenhängende WiederholungUngültige Konfigurationsanweisung: "%s"Element kann nicht erkannt werden.Dauer des Eintrags fehlerhaft.Eintrag hat eine negative Dauer.Priorität des Eintrags muss zwischen 1 und 9 liegen.TasteneinstellungStartbenachrichtigung auf %s für: "%s" Layout Einstellungenmm/tt/jjjjNächster Termin: neinKein Ereignis oder Termin gefundenKeine Notiz angehängtTermin nicht gefundenKeine Aufgabe gefundenEinstellungen der BenachrichtigungNull-ZeigerOption nicht definiertHauptspeicher reicht nicht ausÜberlauf bei %sAusnahmen des Wiederholungstyp falsch.Wiederholungstyp nicht gefunden.Wiederholungstyp nicht bekannt.Wiederholungstyp falsch.schlafe bei %s für %d Sekunde schlafe bei %s für %d Sekunden Gestartet als %s Eingabefehler im DatumSyntaxfehler im Item-BezeichnerSyntaxfehler in Item-WiederholungSyntaxfehler in Item-Zeit oder -DauerEingabefehler im Datumseintragtemporäre Datei "%s" kann nicht erstellt werdenBeendet (%s) mit Signal %d Aufgaben: Aufgabe nicht gefundenunbestimmtUnbekanntes ZeichenUnbekannte FarbeUnbekanntes ExportformatUnbekannter ICal TypUnbekanntes ImportformatUnbekannte Positionunbekannte AnsichtUnbekannter Wiederholungstypunbekannte Option:falsches Konfigurationsvariablenformat für "%s"Falsches ExportformatFalsches Format für den Termin oder das EreignisFalscher Typ des Eintragsxcalloc: Speicher ist vollxcalloc: Überlaufxcalloc: Länge 0xmalloc: Speicher ist vollxmalloc: Länge 0xrealloc: Speicher ist vollxrealloc: Überlaufxrealloc: Länge 0jajjjj-mm-ttjjjj/mm/tt| calcurse memory usage report | calcurse-4.0.0/po/en@quot.header0000644000175000017500000000226312472330401013437 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # calcurse-4.0.0/po/remove-potcdate.sin0000644000175000017500000000066012472330401014462 00000000000000# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } calcurse-4.0.0/po/pt_BR.gmo0000644000175000017500000013061212472330423012370 00000000000000Þ•¦L 3|H#KI#‡•#†$ö¤$†›-¢".Å.Ù.í.////F/Xd/½2Ì2 ß2ê28û2<436q36¨3)ß3) 46344j46Ÿ4IÖ4 555 =5DG55Œ5(Â5Bë59.6Gh6-°6@Þ6717 97)C76m71¤7Ö7ë7ô7!ý78&8/878*?8*j8•8œ8¥8­8µ8Ì8Õ8Þ87ç8:9,Z9 ‡9 ”9¡9D§9ì9 ó9þ9#:2:;:B:]:y:-:¯:µ:½:Æ:Í:ë:)ð:;'5;3];‘;¥;(¾;&ç;<#'<#K<4o<¤<*¬<×<à<#é< =7=:Q='Œ='´=Ü=ø=ý=> &>G>N>W>*`>‹>Ÿ>G²>Gú>%B?3h?œ?Bº?ý?-@DC@<ˆ@(Å@î@A&'ANA#nA’A±AFÑAB8BBSB–B®BÍB‰ëBuC-|CªC!±C"ÓC öC%D0)D$ZDD;ŸDÛDúDE.EIEgEpE.yE ¨E³E·E¿E)ÅEïEôEF"F&ãG"H(H,H0H7H `Q ŸQªQ®QµQºQ)ÀQ&êQ#R5R<TR'‘RC¹R ýR<SF[SF¢S$éSCT=RTFT×TÛT4áT(U?UCUUU]U#`UÖ„U/[V‹V6VÇV9ÐV; W'FW7nWC¦WêW5îW<$X>aX8 XÙXÞXäXëXðXõXúXÿXY4YDYMYmY†Y+¤Y ÐYÜY$îY1ZEZ-`Z)ŽZ&¸Z"ßZ$[ '[H[b[v[“[¬[ É[Ô[ë[ð[ù[ \)\-G\!u\—\²\Â\!â\]]5]G]W]%r]˜]¶]Ï]:í](^';^c^ x^ƒ^–^™^¸^É^ Ý^ê^ ÿ^ _ _-_%<_b_$‚_§_<Â_ÿ_`(`H`%h`Ž`(¬` Õ`ö`þ` aa )a7aKa]aqa ƒa‘a©a,¾aëa(ýa&b6bMb_brb‰bœb´bÇbÛb ßb êb!õbÅc]Ýd™;eŽÕe^ df Ãp¥dq rr/rIr[rvrŒrî«ršv¯vÄvÓvBèv7+w@cwD¤w+éwAx>WxJ–xDáxZ&yy ˜y ¢yM®ySüy7Pz[ˆzIäzS.{>‚{WÁ{| .|8|#A|>e|6¤|Û| ñ|û|,}0}7} ?}I})P}*z}¥}¬} ´}¾}Å} Ú}ä} í}J÷}GB~6Š~ Á~ Î~Û~Há~*1@+V ‚Ž—1¶èEñ7€;€C€L€*S€~€.…€$´€8Ù€9*L)w<¡<Þ,‚2H‚3{‚7¯‚ ç‚@ñ‚2ƒ;ƒ%Dƒ jƒAvƒ9¸ƒ)òƒ+„H„e„.k„š„$£„Ȅфڄ9ï„)…C…X[…`´….†?D†!„†M¦†ô†0‡HA‡=Ї?ȇ$ˆ-ˆ(Kˆ(tˆ.ˆ"̈%ïˆN‰$d‰‰‰Q§‰ù‰&Š?Š”\ŠñŠ#ùŠ‹.&‹.U‹ „‹,’‹@¿‹+Œ%,ŒERŒ'˜ŒÀŒ!àŒ %# I S7]•¤¨®1µç íŽ-Ž9EŽ/Ž"¯ŽÒŽgãŽOK›£©!¯ÑØß è6ö7-Je°·¼ ÀÎÔWåX=‘Z–‘Wñ‘WI’X¡’Zú’WU“­“ÓØ“'è“”)” A”O” X”c”$k”&”·”À” Æ”ç”)ð”8•#S•Aw•>¹•bø•;[– —–!¸– Ú–*û–/&—IV— —§—*®— Ù—ä—8é— "˜-˜ K˜*V˜˜Ÿ˜§˜ ¶˜˜ʘΘÕ˜ î˜Hú˜GC™ ‹™:–™Ñ™Yï™IšXeš¾š>Çš ›6›=J›Zˆ›Dã›(œ<œ@œHœOœ3Wœ-‹œ%¹œ!ßœJ(LMuÃKãS/žRƒžÖžKðž9<ŸHvŸ¿Ÿß:ÈŸ0 4 8  L Y (^ â‡ 2j¡¡2¡¡Ô¡HÜ¡N%¢0t¢J¥¢Oð¢@£HD£C£NÑ£B ¤c¤h¤n¤u¤z¤¤„¤%‰¤¯¤ˤ Ú¤"ä¤"¥&*¥8Q¥ Š¥–¥.¬¥=Û¥$¦G>¦?†¦;Ʀ7§6:§-q§Ÿ§»§!Ò§ô§ ¨ *¨5¨P¨ V¨`¨-o¨%¨Gè ©#+©O©+f©.’©&Á©'詪 ªS0ª*„ª!¯ª Ѫ òª=«Q«*k«–« ¯«º«Ñ«(Ö«ÿ«¬,¬?¬ Y¬g¬}¬“¬1¯¬,á¬-­$<­:a­œ­¬­(É­&ò­0®J®.g®–®´®½® Ԯ߮ö®!¯)¯!C¯e¯¯ “¯´¯:ί °'%°M°a°€°Ÿ°µ°Ô°ê° ±*±A± E± P±.[± ìÇ£ |Ú"p¦ œØ¾f“PÓº‰u N Ùw$—-*f«q°¤< Žlî[“)²¢ÀB+6Ö49y;cm=h Yð»ôJ!3F0¨€jYÿl0RWj$¸¥‘^‡¬¹_?tÉ(e®‹v–§¥Œ×—Gk7æO…áù;üŸ€ûv6ZgÜWKbt±ÑcFwÒKãõ}©!Â?çó%E–~ĘåQúNëÌ]ƽ2,Ô„Û*#ÅCLŽ„’|#9od⢞ÎP™Œ @…'ÝŸG˜iŠšA 8•M%:›”_gñX{ß."Hyr†r@¯£ÑRí/1Hø.uaž  Cþ(D›¿œz‹1Èè~xOäïibª S÷LêJT:ƒq†nËmé‡4>5ý+= )QTI¤oM\d³’`¼ˆ8VxVS>¡´¶sI¡X Ua,Э&”BŠhe‚Ïp\·}µ[Ê]AZÍ/‰ˆ™Þ<Uzà-•k¦`^Ds‚ö7šn&3'ƒòÕÁ25E{ For more information, type '?' from within Calcurse, or read the manpage. If a previous conversion did not complete, please try to remove this file and start over with a backup of your old configuration file. If a previous conversion did not complete, please try to restore your configuration from this backup and then remove the backup file. Miscellaneous: -h, --help print this help and exit. -v, --version print calcurse version and exit. --status display the status of running instances of calcurse. --read-only Don't save configuration nor appointments/todos. Use with care. Files: -c , --calendar specify the calendar to use (has precedence over '-D'). -D , --directory specify the data directory to use. If not specified, the default directory is ~/.calcurse Non-interactive: -a, --appointment print events and appointments for current day and exit. -d , --day print events and appointments for or upcoming days and exit. To specify both a starting date and a range, use the '--startday' and the '--range' option. -g, --gc run the garbage collector for note files and exit. -i , --import import the icalendar data contained in . -n, --next print next appointment within upcoming 24 hours and exit. Also given is the remaining time before this next appointment. -l , --limit only print information regarding the next items. -r[num], --range[=num] print events and appointments for the [num] number of days and exit. If no [num] is given, a range of 1 day is considered. -s[date], --startday[=date] print events and appointments from [date] and exit. If no [date] is given, the current day is considered. -S, --search= search for the given regular expression within events, appointments, and todos description. -t[num], --todo[=num] print todo list and exit. If the optional number [num] is given, then only todos having a priority equal to [num] will be returned. The priority number must be between 1 (highest) and 9 (lowest). It is also possible to specify '0' for the priority, in which case only completed tasks will be shown. -x[format], --export[=format] export user data to the specified format. Events, appointments and todos are converted and echoed to stdout. Two possible formats are available: 'ical' and 'pcal'. If the optional argument format is not given, ical format is selected by default. note: redirect standard output to export data to a file, by issuing a command such as: calcurse --export > calcurse.dat Too many errors while reading configuration file! Please backup your keys file, remove it from directory, and launch calcurse again. WARNING: it seems that another calcurse instance is already running. If this is not the case, please remove the following lock file: "%s" and restart calcurse. id: %u size: %u unfreed blocks: %u allocated in: %s number of calls: %u allocated blocks: %u "%s" assigned multiple times!# # Calcurse keys configuration file # # This file sets the keybindings used by Calcurse. # Lines beginning with "#" are comments, and ignored by Calcurse. # To assign a keybinding to an action, this file must contain a line # with the following syntax: # # ACTION KEY1 KEY2 ... KEYn # # Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn # will be pressed. # # To define bindings which use the CONTROL key, prefix the key with 'C-'. # The escape, space bar and horizontal Tab key can be specified using # the 'ESC', 'SPC' and 'TAB' keyword, respectively. # Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords. # Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END' # keywords. # # A description of what each ACTION keyword is used for is available # from calcurse online configuration menu. %d app%d apps%d event%d events%d skipped%d todo%d todos(Command used to notify user of an upcoming appointment)(Format of the date to be displayed in non-interactive mode)(Format of the date to be displayed inside notify-bar)(Format of the time to be displayed inside notify-bar)(Format to be used when entering a date: (Log activity when running in background)(Notify all appointments instead of flagged ones only)(Press '^P' or '^N' to move up or down, 'Q' to quit)(Run in background to get notifications after exiting)(Warn user if an appointment is within next 'notify-bar_warning' seconds)(currently using %s)(d)aily(d)iscard(if not null, automatically save data every 'periodic_save' minutes)(if set to YES, automatic save is done when quitting)(if set to YES, compact panels are used)(if set to YES, confirmation is required before deleting an event)(if set to YES, confirmation is required before quitting)(if set to YES, messages about loaded and saved data will be displayed)(if set to YES, notify-bar will be displayed)(if set to YES, progress bar will be displayed when saving data)(k)eep and cancel(m)erge(m)onthly(run the garbage collector when quitting)(specifies the first day of week in the calendar view)(specifies the panel that is selected by default)(terminal's default)(w)eekly(y)early+------------------------------+ +1 Day+1 Month+1 Week+1 Year----------------------------------------- ---==== MEMORY BLOCK ====---------------- -1 Day-1 Month-1 Week-1 Year/!\ INTERNAL ERROR /!\Add ApptAdd ItemAdd TodoAdd a todo item, whichever panel is currently selected.Add an appointment, whichever panel is currently selected.Add an item to the currently selected panel.Appointment:AppointmentsAprilAttach (or edit if one exists) a note to the currently selected itemAugustBackgroundBlock not foundCalcurse %s - text-based organizer CalendarCancelCancel the ongoing action.Cannot daemonize, aborting Chg WinChoose the file used to export calcurse data:ColorCommandCommand:ConfigConfiguration file not found:CopyCopy the item that is currently selected.Could not access "%s": %s Could not change working directory: %s Could not detach from the controlling terminal: %s Could not fork: %s Could not read key labelCould not remove calcurse lock file: %s Could not remove daemon lock file: %s Could not set lock file Could not stop calcurse daemon: %s Could not stop daemon properly: %s Create temporary backup of the configuration file...CreditsData files found. Data will be loaded now.DecemberDel ItemDelete the currently selected item.DescriptionDisplay hints whenever some help screens are available.Display the currently selected item inside a popup window.Do you really want to delete this item?Do you really want to delete this task?Do you really want to quit?DownERROR setting first day of weekEdit ItmEdit the currently seleted item.Edit: EditNoteEnd timeEnter an option number to change its valueEnter command mode.Enter description:Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:Enter start time ([hh:mm] or [hhmm]):Enter the TODO priority [1 (highest) - 9 (lowest)]:Enter the configuration menu.Enter the date format (see 'man 3 strftime' for possible formats) Enter the date format: Enter the day to go to [ENTER for today] : %sEnter the delay, in minutes, between automatic saves (0 to disable) Enter the ending date: [%s] or '0' for an endless repetitionEnter the file name to import data from:Enter the new TODO description:Enter the new TODO item:Enter the new ending date: [%s] or '0'Enter the new item description:Enter the new repetition frequence:Enter the new repetition type:Enter the notification command Enter the number of seconds (0 not to be warned before an appointment)Enter the repetition frequence:Enter the repetition type:Enter the time format (see 'man 3 strftime' for possible formats) Error reading key: "%s"Error setting signal #%d : %s Error when closing file at %sError: both calcurse (pid: %d) and its daemon (pid: %d) seem to be running at the same time! Please check manually and restart calcurse. Event:Exit from the current menu, or quit calcurse.ExportExport data to a new file format.Export to (i)cal or (p)cal format?Exporting...FATAL ERROR: could not create %s: %s FATAL ERROR: could not create default keys file.FATAL ERROR: key value out of boundsFATAL ERROR: null file pointer.FATAL ERROR: the input file cannot be accessed, Aborting...FATAL ERROR: wrong import modeFailed to build message Failed to close "%s" - %s Failed to open "%s", - %s Failed to print message "%s" FebruaryFlag ItmFlag the currently selected item as important.ForegroundFriGeneralGo toGo to today, whichever panel is selected.HelpHelp topic does not exist: %sImportImport data from an external file.Import process report: %04d lines readInternal error while displaying progress barInternal error: line too longInvalid delayInvalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], [+xxxdxxhxxm] or [+mm]Invalid time: start time must be before end time!JanuaryJulyJuneKey label not recognizedKeysLayoutLeftLoading...Lower a task priority inside the todo panel.Mail bug reports to . Mail feature requests and suggestions to . MarchMayMonMondayMoveMove down.Move to next day in calendar, whichever panel is currently selected.Move to next month in calendar, whichever panel is currently selected.Move to next week in calendar, whichever panel is currently selected.Move to next year in calendar, whichever panel is currently selected.Move to previous day in calendar, whichever panel is currently selected.Move to previous month in calendar, whichever panel is currently selectedMove to previous week in calendar, whichever panel is currently selectedMove to previous year in calendar, whichever panel is currently selectedMove to the left.Move to the right.Move up.No log file to display!No note file found No such command: %sNotifyNovemberNxt ViewOctoberOld backup file found:Old temporary file found:OtherCmdPastePaste an item at the current position.PipePipe item to external command:Pipe the currently selected item to an external program.Please report the following bug:Possible formats are [%s] or '0' for an endless repetitionPossible formats are [%s] or '0' for an endless repetition.Pre-3.0.0 configuration file format detected, please upgrade running `calcurse-upgrade`.Pre-3.0.0 configuration file format detected...Press [ENTER] to continuePress [ENTER] to continue.Press [Enter] to continuePress any key to continue...Press the key you want to assign to:Print general information about calcurse's authors, license, etc.Prio.+Prio.-Problems accessing data file ...Prv ViewQuitRaise a task priority inside the todo panel.RedrawRedraw calcurse's screen.ReloadReload appointments and todo items.Remove temporary backup...RepeatRepeat an itemRepetitionRightSatSaveSave calcurse data.Saving...Scroll window down (e.g. when displaying text inside a popup window).Scroll window up (e.g. when displaying text inside a popup window).SelectSelect next panel in calcurse main screen.Select the day to go to.Select the first day of the current week when inside the calendar panel.Select the highlighted item.Select the last day of the current week when inside the calendar panel.SeptemberShow next possible actions inside status bar.SidebarSome actions do not have any associated key bindings!Some items could not be imported, see log file?Sorry, colors are not supported by your terminal (Press [ENTER] to continue)Sorry, the date you entered is older than the item start time.Start timeSunSundayTODOTODO:The data files were reloaded successfullyThe data files were successfully savedThe data were successfully exportedThe entered date is not valid.The file cannot be accessed, please enter another file name.The frequence you entered is not valid.The ical file seems to be malformed. The end of item was not found.There are unsaved modifications:There were some errors when loading keys file, see log file?This item has a note attached to it. Delete (i)tem or just its (n)ote?This item has a note attached to it. Delete (t)odo or just its (n)ote?This item is already a repeated one.This item is recurrent. Delete (a)ll occurences or just this (o)ne?This key is already in use for %s, please choose another one.This key is not yet recognized by calcurse, please choose another one.ThuTodayToo many errors while reading keys file, aborting...Try 'calcurse -h' for more information. TueUndefined option!UnknownUpUpgrade configuration directives...Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]] [-d |] [-s[date]] [-r[range]] [-c] [-D] [-S] [--status] [--read-only] Usage: calcurse-upgrade [-h|-v|--config ]ViewView the note attached to the currently selected item.ViewNoteWarning: could not create temporary log file, Aborting...Warning: could not erase temporary log file %s, Aborting...Warning: could not open %s, Aborting...Warning: could not open temporary log file, Aborting...Warning: ical header malformed or wrong version number. Aborting...WedWelcome to Calcurse. Missing data files were created.When adding default key for "%s", "%s" was already assigned!You entered an invalid start time, should be [hh:mm] or [hhmm]You entered an invalid time, should be [hh:mm] or [hhmm][ao][dmk][dwmy][in][ip][tn][yn]appointment has no start time.appointment not foundawakened at %s beg Weekblock seems already freed at %scalcurse is not running calcurse is running (pid %d) calcurse is running in background (pid %d) color themecompleted tasks: configuration variable unknown: "%s"corrupt block end at %s, (end = %u, should be %d)corrupt block header at %scould not allocate memory to store block infocould not compute duration (no end time).could not get entire item description.could not retrieve event end time.could not retrieve event start time.could not retrieve item summary.date error in appointmentdate error in eventdate error in item exceptiondate error in the event dbg_free: null pointer at %sdd/mm/yyyydescription malformed.doneend Weekerror in mktimeerror loading next appointment error while launching commanderror while launching command: could not forkerror while sending notification event date is not defined.event not foundfailed to open appointment filefailed to open configuration filefailed to open key filefailed to open todo filefailure in mktimegeneral optionsincoherent repetition typeinvalid configuration directive: "%s"item could not be identified.item duration malformed.item has a negative duration.item priority is not acceptable (must be between 1 and 9).keys configurationlaunching notification at %s for: "%s" layout configurationmm/dd/yyyynext appointment: nono event nor appointment foundno note attachedno such appointmentno such todonotification optionsnull pointeroption not definedout of memoryoverflow at %srecurrence exception dates malformed.recurrence frequence not found.recurrence frequence not recognized.recurrence rule malformed.sleeping at %s for %d second sleeping at %s for %d seconds started at %s syntax error in item datesyntax error in item identifiersyntax error in item repetitionsyntax error in item time or durationsyntax error in the item datetemporary file "%s" could not be createdterminated at %s with signal %d to do: todo not foundundefinedunknown characterunknown colorunknown export typeunknown ical typeunknown import typeunknown item typeunknown panelunknown repetition typeunrecognized option:wrong configuration variable format for "%s"wrong export modewrong format in the appointment or eventwrong item typexcalloc: out of memoryxcalloc: overflowxcalloc: zero sizexmalloc: out of memoryxmalloc: zero sizexrealloc: out of memoryxrealloc: overflowxrealloc: zero sizeyesyyyy-mm-ddyyyy/mm/dd| calcurse memory usage report | Project-Id-Version: calcurse Report-Msgid-Bugs-To: bugs@calcurse.org POT-Creation-Date: 2015-02-22 10:37+0100 PO-Revision-Date: 2014-09-08 17:32+0000 Last-Translator: Rafael Ferreira Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/calcurse/language/pt_BR/) Language: pt_BR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); Para maiores informações, pressione "?" estando dentro do Calcurse ou leia a página man. Se uma conversão anterior não completou, favor tente excluir este arquivo e começar do começo com um backup de seu arquivo de configuração antigo. Se uma conversão anterior não completou, favor tente restaurar sua configuração a partir deste backup e, então, exclua o arquivo backup. Miscelânea: -h, --help exibe esta mensagem de ajuda e sai. -v, --version exibe a versão do calcurse e sai. --status mostra o status de instâncias em execução do calcurse. --read-only não salva configuração nem agendamentos/tarefas. Use com cuidado. Arquivos: -c , --calendar especifica o de calendário a ser usado (precede '-D'). -D , --directory especifica o diretório de dados a ser usado. Se não for especificado, o diretório padrão do calcurse é ~/.calcurse Não-interativo: -a, --appointment exibe eventos e agendamentos para o dia atual e sai. -d , --day exibe eventos e agendamentos para dias próximos ou e sai. Para especificar ambas data de início e uma faixa, use a opção '--startday' e a '--range'. -g, --gc executa o coletor de lixo para arquivos de anotação e sai. -i , --import importa os dados de icalendar contidos no . -n, --next exibe próximo agendamento dentro das próximas 24 horas e sai. Também é dado o tempo restante até o próximo agendamento. -l , --limit exibe apenas informações relacionadas os próximos items. -r[número], --range[=número] exibe eventos e agendamentos para o número [número] de dias e sai. Se nenhum [número] for dado, uma faixa de 1 dia é considerada. -s[data], --startday[=data] exibe eventos e agendamentos da [data] e sai. Se nenhuma [data] for dada, o dia atual é considerado. -S, --search= pesquisa pela expressão regular dada dentro de descrições de eventos, agendamentos e tarefas. -t[número], --todo[=número] exibe lista de tarefas e sai. Se o número [número] opcional for dado, então somente tarefas contendo uma prioridade igual a [número] serão retornados. O número de prioridade deve estar entre 1 (maior) e 9 (menor). Também é possível especificar '0' como prioridade, caso este em que somente tarefas finalizadas serão exibidas. -x[formato], --export[=formato] exporta dados do usuário para o formato especificado. Eventos, agendamentos e tarefas são convertidos e enviados para a stdout. Dois formatos estão disponíveis: 'ical' e 'pcal'. Se o argumento opcional de formato não for dado, o formato ical é selecionado por padrão. nota: redireciona a saída padrão (stdout) para exportar os dados para um arquivo, simplesmente executando um comando como este: calcurse --export > calcurse.dat Muitos erros de leitura do arquivo de configuração! Favor faça backup de seus arquivos de teclas, exclua-o de seu diretório e carregue calcurse novamente. AVISO: para que outra instância de calcurse já está em execução. Se este não é o caso, favor excluir o seguinte arquivo de trava: "%s" e reinicie calcurse. id: %u tamanho: %u blocos não livres: %u alocado em: %s número de chamadas: %u blocos alocados: %u "%s" alocada múltiplas vezes!# # Calcurse - arquivo de configuração de teclas # # Este arquivo define as teclas de atalhos (keybindings) usadas pelo Calcurse. # Linhas iniciadas com "#" são comentários, e são ignoradas pelo Calcurse. # Para designar uma tecla de atalho para uma ação, o arquivo deve conter uma # linha com a seguinte sintaxe: # # AÇÃO TECLA1 TECLA2 ... TECLAn # # Onde AÇÃO é o que será executado quando TECLA1, TECLA2, ..., ou TECLAn # for pressionada. # # Para definir atalhos que usem a tecla CONTROL, insira antes 'C-' na tecla. # Para as teclas ESC, barra de espaço e Tab horizontal, podem ser# especificadas as palavras-chave 'ESC', 'SPC' e 'TAB', respectivamente. # Teclas de setas podem também ser especificadas com as palavras-chave UP, DWN,# LFT e RGT.# Por último, teclas Home e End podem ser designadas usando as palavras-chave # 'KEY_HOME' e 'KEY_END'.# # Uma descrição do como cada palavra-chave de AÇÃO é está disponível no menu # de configuração online do calcurse. %d agend.%d agends.%d evento%d eventos%d ignorado(s)%d tarefa%d tarefas(Comando usado para notificar usuário de um agendamento próximo)(formato da data a ser exibido no modo não interativo)(Formato da data a ser exibida dentro da barra de notificação)(Formato de horário a ser exibido dentro da barra de notificação)(formato a ser usado ao informar uma data: (Registra atividades quando estiver executando em plano de fundo)(Notifica todos agendamentos ao invés de somente os marcados)(Pressione "^P" ou "^N" para mover para cima ou para baixo, "Q" para sair)(Executa em plano de fundo para pegar notificações depois de sair)(Avisa o usuário se um agendamento ocorrerá nos próximos "notify-bar_warning" segundos)(atualmente usando %s)(d)iária(d)escartar(se não nulo, automaticamente salva os dados a cada "periodic_save" minutos)(se definida como SIM, salvamento automático será feito quando estiver de saída)(se definido para SIM, painéis compactos são usados) (se definida como SIM, uma confirmação será necessária antes da exclusão de um evento)(se definida como SIM, uma confirmação será necessária antes de sair)(se definida como SIM, mensagens sobre dados carregados e salvados serão exibidos)(Se definida como SIM, a barra de notificação será exibida)(se definida como SIM, barra de progresso será exibida durante o salvamento dos dados)manter e (c)cancelar(m)esclar(m)ensal(executa o coletor de lixo ao sair)(especifica o primeiro dia da semana na visão de calendário)(especifica o painel que fica selecionado por padrão)(padrão do terminal)(s)emanal(a)nual+-----------------------------------------+ +1 Dia+1 Mês+1 Semana+1 Ano---------------------------------------- ---==== BLOCO DE MEMÓRIA ====----------- -1 Dia-1 Mês-1 Semana-1 Ano/!\ ERRO INTERNO /!\AdicAgendAdicItemAdiTarefaAdiciona um item de tarefa, seja qual for o painel atualmente selecionado.Adiciona um agendamento, seja qual for o painel atualmente selecionado.Adiciona um item para o painel atualmente selecionado.Agendamento:AgendamentosAbrilAnexa (ou edita, se já existir) uma nota ao item atualmente selecionadoAgostoPlano de fundoBloco não encontradoCalcurse %s - organizador baseado em texto CalendárioCancelarCancela a ação em andamento.Não foi possível executar em daemon, abortando MudarJanEscolha o arquivo para o qual serão exportados os dados do calcurse:CorComandoComando:ConfigArquivo de configuração não encontrado:CopiarCopia o item que está selecionado no momento.Não foi possível acessar "%s": %s Não foi possível alterar o diretório de trabalho: %s Não foi possível desanexar do terminal de controle: %s Não foi possível fazer bifurcação: %s Não foi possível ler o rótulo de teclaNão foi possível excluir arquivo de trava do Calcurse: %s Não foi possível excluir o arquivo de trava do daemon: %s Não foi possível definir arquivo de trava Não foi possível parar o daemon do calcurse: %s Não foi possível parar o daemon corretamente: %s cria backup temporário do arquivo de configuração...CréditosArquivos de dados encontrados. Os dados serão carregados agora.DezembroExclItemExclui o item atualmente selecionado.DescriçãoExibe dicas quando algumas telas de ajuda estiverem disponíveis.Exibe o item atualmente selecionado em uma janela pop-up.Tem certeza que deseja excluir este item?Tem certeza que deseja excluir esta tarefa?Tem certeza que deseja sair?BaixoERRO na configuração do primeiro dia do mêsEditItemEdita o item atualmente selecionado.Editar: EditNotaHorário de términoEntre com o número de uma opção para alterar seu valorEntra no modo de comando.Insera uma descrição:Insira um horário de término ([hh:mm], [hhmm]) ou duração ([+hh:mm], [+xxxdxxhxxm]):Insira o horário de início ([hh:mm] ou [hhmm]); deixe em branco para um evento de dia inteiro:Insira o horário início ([hh:mm] ou [hhmm]):Insira a prioridade da TAREFA [1 (mais alta) - 9 (mais baixa)]:Entra no menu de configurações.Entre com o formato da data (veja "man 3 strftime" para formatos possíveis) Entre com formato da data: Insira o dia para ir para [ENTER para hoje] : %sEntre com a distância, em minutos, entre salvamentos (0 = desabilitar) Insira a data final: [%s] ou "0" para uma repetição sem fimEntre com o nome do arquivo de onde serão importados os dados:Insira a nova descrição da TAREFA:Insira o novo item da TAREFA:Entre com a nova data final: [%s] ou "0"Insira uma descrição para o novo item:Entre com uma nova frequência de repetição:Insira o novo tipo de repetição:Entre com o comando de notificação Entre com o número de segundos (0 para não ser avisado antes do agendamento)Insira a frequência de repetição:Insira o tipo da repetição:Entre com o formato do horário (veja "man 3 strftime" para formatos possíveis) Erro na leitura da tecla: "%s"Erro na definição de sinal #%d : %s Erro em fechar arquivo em %sErro: ambos calcurse (pid: %d) e seu daemon (pid: %d) parecem estar em execução simultaneamente! Favor verifique manualmente e reinicie calcurse. Evento:Sai deste menu, ou sai do calcurse.ExportarExporta dados para um novo formato de arquivo.Exportar para o formato (i)cal ou para (p)cal?Exportando...ERRO FATAL: não foi possível criar %s: %s ERRO FATAL: não foi possível criar arquivo de teclas padrões.ERRO FATAL: valor da tecla fora dos limitesERRO FATAL: ponteiro nulo de arquivo.ERRO FATAL: o arquivo de entrada não pode ser acessado. Abortando...ERRO FATAL: modo de importação erradoFalha na criação da mensagem Falha no fechamento de "%s" - %s Falha na abertura de "%s", - %s Falha na exibição da mensagem "%s" FevereiroSinalItemSinaliza o item atualmente selecionado como importante.Primeiro planoSexGeralIrParaIr para hoje, seja qual for o painel selecionado.AjudaTópico de ajuda não existe: %sImportarImporta dados a partir de um arquivo externo.relatório do processo de importação: %04d linhas lidasErro interno enquanto exibia barra de progressoErro interno: linha muito compridaAtraso inválidoHorário de término/duração inválido, deveria ser [hh:mm], [hhmm], [+hh:mm], [+xxxdxxhxxm] ou [+mm]Horário inválido: horário de início deve ser antes do horário de término!JaneiroJulhoJunhoRótulo de tecla não reconhecidaTeclasLayoutEsquerdaCarregando...Reduz a prioridade de uma tarefa no painel de tarefas.Envie relatórios de erros para .\n Envie solicitações de recursos e sugestões para .\n MarçoMaioSegSegunda-feiraMoverMove para baixo.Move para o dia seguinte no calendário, seja qual for o painel atualmente selecionado.Move para o mês seguinte no calendário, seja qual for o painel atualmente selecionado.Move para a semana seguinte no calendário, seja qual for o painel atualmente selecionado.Move para o ano seguinte no calendário, seja qual for o painel atualmente selecionado.Move para o dia anterior no calendário, seja qual for o painel atualmente selecionado.Move para o mês anterior no calendário, seja qual for o painel atualmente selecionado.Move para a semana anterior no calendário, seja qual for o painel atualmente selecionado.Move para o ano anterior no calendário, seja qual for o painel atualmente selecionado.Move para a esquerda.Move para a direita.Move para cima.Nenhum arquivo de log para ser exibido!Nenhuma nota encontrada Comando inexistente: %sNotificaçãoNovembroVisão SegOutubroArquivo de backup antigo encontrado:Arquivo temporário antigo encontrado:OutroCmdColarCola um item na posição atual.Redirec.Redirecionar o item para comando externo:Redireciona o item selecionado para um programa externo.Por favor, reporte o seguinte erro:Formatos possíveis são [%s] ou "0" para uma repetição sem fimFormatos possíveis são [%s] ou "0" para repetição sem fim.Formato de arquivo de configuração pré-3.0.0 detectado. Favor, atualize com "calcurse-upgrade".Formato de arquivo de configuração pre-3.0.0 detectado...Pressione [ENTER] para continuarPressione [ENTER] para continuar.Pressione [Enter] para continuarPressione qualquer tecla para continuar...Pressione a tecla que você quer designar para:Imprime informações gerais sobre os autores do calcurse, licença, etc.Prio.+Prio.-Problemas no acesso do arquivo de dados...Visão AntSairAumenta a prioridade de uma tarefa no painel de tarefas.RedesenharRedesenha a tela do calcurse.RecarregarRecarrega agendamentos e lista de tarefas.Excluir backup temporário...RepetirRepete um itemRepetiçãoDireitaSabSalvarSalva dados do calcurse.Salvando...Rola a tela para baixo (ex: quando exibindo texto em uma janela pop-up).Rola a tela para cima (ex: quando exibindo texto em uma janela pop-up).SelecionarSeleciona o próximo painel na tela principal do calcurse.Seleciona o dia para ir para.Seleciona o primeiro dia da semana atual quando se está dentro do painel do calendário.Seleciona o item realçado.Seleciona o último dia da semana atual quando se está dentro do painel do calendário.SetembroMostra próximas ações possíveis dentro da barra de status.BarraLateralAlgumas ações não têm teclas de atalho associadas!Alguns itens não puderam ser importados; ver arquivo de log?Sinto muito, cores não são suportadas em seu terminal (Pressione [Enter] para continuar)Desculpe, a data que foi informou é mais antiga que a data inicial.Horário de inícioDomDomingoTAREFATAREFA:Os arquivos de dados foram recarregados com sucessoOs arquivos de dados foram salvos com sucessoOs dados foram exportados com sucessoA data informada não é válida.O arquivo não pode ser acessado. Por favor, insira outro nome de arquivo.A frequência informada não é válida.O arquivo ical parece estar mal-formulada. O fim do item não foi encontrado.Há modificações não salvas:Ocorreram alguns erros ao carregar o arquivo de teclas; ver arquivo de log?Este item tem uma anotação anexada a ele. Excluir o (i)tem ou somente sua (n)ota?Este item possui uma nota anexada a ele. Excluir a (t)arefa ou somente sua (n)ota?Este é um item repetido.Este item é recorrente. Excluir (t)odas as ocorrências ou (s)omente esta?Essa tecla está sendo usada por %s, favor escolha outra.Essa tecla não é reconhecida ainda pelo calcurse, favor escolha outra.QuiHojeErros demais na leitura do arquivo de chaves, abortando...Tente "calcurse -h" para maiores informações. TerOpção indefinida!DesconhecidoCimaAtualizar diretivas de configuração...Uso: calcurse [-g|-h|-v] [-an] [-t[número]] [-i] [-x[formato]] [-d |] [-s[data]] [-r[número]] [-c] [-D] [-S] [--status] [--read-only] Uso: calcurse-upgrade [-h|-v|--config ]VerVê a nota anexada ao item atualmente selecionado.VerNotaAviso: não foi possível criar arquivo temporário de log. Abortando...Aviso: não foi possível apagar o arquivo temporário de log %s. Abortando...Aviso: não foi possível abrir %s. Abortando...Aviso: não foi possível abrir o arquivo temporário de log. Abortando...Aviso: cabeçalho ical mal-formulado ou número de versão errado. Abortando...QuaBem-vindo ao Calcurse. Arquivos de dados não encontrados foram criados.Quando adicionava tecla padrão para "%s", "%s" já foi designada!Você inseriu um horário de início inválido - deveria ser [hh:mm] ou [hhmm]Você inseriu um horário inválido, deveria ser [hh:mm] ou [hhmm][ts][dmc][dsma][in][ip][tn][sn]agendamento não tem hora de início.agendamento não encontradoAcordou em %s IniSemanabloco parece já estar livre em %scalcurse não está em execução calcurse está em execução (pid %d) calcurse está em execução em plano de fundo (pid %d) Tema de Cortarefas finalizadas: variável de configuração desconhecida: "%s"final de bloco corrompido em %s, (final = %u, deveria ser %d)cabeçalho do bloco corrompido em %snão foi possível alocar memória para armazenar informação do bloconão foi possível computar duração (falta hora de término).não foi possível adquirir a descrição completa do item.não foi possível adquirir hora de término do evento.não foi possível adquirir hora de início do evento.não foi possível adquirir sumário do item.erro de data no agendamentoerro na data em eventoerro de data em exceção de itemerro de data no evento dbg_free: ponteiro nulo em %sdd/mm/yyyydescrição mal-formulada.feitoFimSemanaerro no mktimeerro no carregamento do agendamento seguinte erro durante o lançamento do comandoerro durante o lançamento do comando: não foi possível realizar forkErro no envio de notificação data de evento não está definida.evento não encontradofalha na abertura do arquivo de agendamentofalha na abertura do arquivo de configuraçãofalha na abertura do arquivo de teclasfalha na abertura do arquivo de tarefasfalha no mktimeOpções Gerais(se definida como SIM, salvamento automático será feito quando estiver de saída)diretiva de configuração inválida: "%s"item não pôde ser identificado.duração de item mal-formulada.item tem uma duração negativa.prioridade de item não é aceitável (deve ser entre 1 e 9).Configuração das TeclasIniciando notificação em %s para : "%s" Configuração de layoutmm/dd/yyyypróximo agendamento: nãonenhum evento nem agendamento encontradonenhuma nota anexadaagendamento inexistentetarefa inexistenteopções de notificaçãoponteiro nuloopção não definidamemória insuficienteestouro de capacidade em %sExceção de datas de recorrência mal-formulada.frequência de recorrência não encontrada.frequência de recorrência não reconhecida.regra de recorrência mal-formulada.Dormir em %s por %d segundo Dormir em %s por %d segundos Iniciado em %s erro de sintaxe no item dataerro de sintaxe no identificador do itemerro de sintaxe na repetição do itemerro de sintaxe no horário ou duração do itemerro de sintaxe no item dataarquivo temporário "%s" não pôde ser criadoTerminado em %s com sinal %d tarefa: tarefa não encontradaindefinidacaractere desconhecidocor desconhecidatipo de exportação desconhecidotipo de ical desconhecidotipo de importação desconhecidatipo de item desconhecidopainel desconhecidotipo de repetição desconhecidaopção não reconhecida:formato incorreto de variável de configuração para "%s"modo de exportação erradoformato errado no agendamento ou eventotipo de item erradoxcalloc: memória insuficientexcalloc: estouro de capacidadexcalloc: tamanho zeroxmalloc: memória insuficientexmalloc: tamanho zeroxrealloc: memória insuficientexrealloc: estouro de capacidadexrealloc: tamanho zerosimyyyy-mm-ddyyyy/mm/dd| relatório de uso de memória do calcurse | calcurse-4.0.0/po/nl.po0000644000175000017500000010372212472326722011640 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR calcurse Development Team # This file is distributed under the same license as the PACKAGE package. # # Translators: # Lukas Fleischer , 2011 # bucovaina78 , 2012 msgid "" msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: bugs@calcurse.org\n" "POT-Creation-Date: 2015-02-22 10:37+0100\n" "PO-Revision-Date: 2014-08-03 21:51+0000\n" "Last-Translator: Lukas Fleischer \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/calcurse/language/" "nl/)\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "null pointer" msgstr "" msgid "date error in appointment" msgstr "gegevensfout in de afspraak" msgid "no such appointment" msgstr "" msgid "" "Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" " [-c] [-D] [-S] [--status]\n" " [--read-only]\n" msgstr "" msgid "Try 'calcurse -h' for more information.\n" msgstr "Gebruik 'calcurse -h', voor meer informatie.\n" msgid "" "\n" "Copyright (c) 2004-2015 calcurse Development Team.\n" "This is free software; see the source for copying conditions.\n" msgstr "" #, c-format msgid "Calcurse %s - text-based organizer\n" msgstr "Calcurse %s - tekst-gebaseerde organizer\n" msgid "" "\n" "For more information, type '?' from within Calcurse, or read the manpage.\n" msgstr "" "\n" "Typ '?' in Calcurse voor meer informatie, of lees de man-pagina.\n" msgid "Mail feature requests and suggestions to .\n" msgstr "" msgid "Mail bug reports to .\n" msgstr "" msgid "" "\n" "Miscellaneous:\n" " -h, --help\n" "\tprint this help and exit.\n" "\n" " -v, --version\n" "\tprint calcurse version and exit.\n" "\n" " --status\n" "\tdisplay the status of running instances of calcurse.\n" "\n" " --read-only\n" "\tDon't save configuration nor appointments/todos. Use with care.\n" "\n" "Files:\n" " -c , --calendar \n" "\tspecify the calendar to use (has precedence over '-D').\n" "\n" " -D , --directory \n" "\tspecify the data directory to use.\n" "\tIf not specified, the default directory is ~/.calcurse\n" "\n" "Non-interactive:\n" " -a, --appointment\n" " \tprint events and appointments for current day and exit.\n" "\n" " -d , --day \n" "\tprint events and appointments for or upcoming days and\n" "\texit. To specify both a starting date and a range, use the\n" "\t'--startday' and the '--range' option.\n" "\n" " -g, --gc\n" "\trun the garbage collector for note files and exit. \n" "\n" " -i , --import \n" "\timport the icalendar data contained in . \n" "\n" " -n, --next\n" "\tprint next appointment within upcoming 24 hours and exit. Also given\n" "\tis the remaining time before this next appointment.\n" "\n" " -l , --limit \n" "\tonly print information regarding the next items. \n" "\n" " -r[num], --range[=num]\n" "\tprint events and appointments for the [num] number of days\n" "\tand exit. If no [num] is given, a range of 1 day is considered.\n" "\n" " -s[date], --startday[=date]\n" "\tprint events and appointments from [date] and exit.\n" "\tIf no [date] is given, the current day is considered.\n" "\n" " -S, --search=\n" "\tsearch for the given regular expression within events, appointments,\n" "\tand todos description.\n" "\n" " -t[num], --todo[=num]\n" "\tprint todo list and exit. If the optional number [num] is given,\n" "\tthen only todos having a priority equal to [num] will be returned.\n" "\tThe priority number must be between 1 (highest) and 9 (lowest).\n" "\tIt is also possible to specify '0' for the priority, in which case\n" "\tonly completed tasks will be shown.\n" "\n" " -x[format], --export[=format]\n" "\texport user data to the specified format. Events, appointments and\n" "\ttodos are converted and echoed to stdout.\n" "\tTwo possible formats are available: 'ical' and 'pcal'.\n" "\tIf the optional argument format is not given, ical format is\n" "\tselected by default.\n" "\tnote: redirect standard output to export data to a file,\n" "\tby issuing a command such as: calcurse --export > calcurse.dat\n" msgstr "" #, c-format msgid "" "Error: both calcurse (pid: %d) and its daemon (pid: %d)\n" "seem to be running at the same time!\n" "Please check manually and restart calcurse.\n" msgstr "" #, c-format msgid "calcurse is running (pid %d)\n" msgstr "calcurse draait (pid%d)\n" #, c-format msgid "calcurse is running in background (pid %d)\n" msgstr "calcurse draait op de achtergrond (pid%d)\n" msgid "calcurse is not running\n" msgstr "calcurse is niet actief\n" msgid "completed tasks:\n" msgstr "afgewerkte taken:\n" msgid "to do:\n" msgstr "Taken:\n" msgid "next appointment:\n" msgstr "Volgende afspraak :\n" #, c-format msgid "invalid date: %s" msgstr "" #, c-format msgid "invalid range: %s" msgstr "" #, c-format msgid "invalid priority: %s" msgstr "" #, c-format msgid "invalid export format: %s" msgstr "" msgid "invalid filter mask" msgstr "" #, fuzzy msgid "cannot handle more than one regular expression" msgstr "Kan niet meer dan een reguliere expressie behandelen." #, fuzzy, c-format msgid "could not compile regular expression: %s" msgstr "Kan de reguliere expressie niet compileren." #, c-format msgid "invalid date range: %s" msgstr "" msgid "invalid argument combination" msgstr "" msgid "cannot specify a range and an end date" msgstr "" msgid "Export to (i)cal or (p)cal format?" msgstr "" msgid "[ip]" msgstr "" msgid "Do you really want to quit?" msgstr "" msgid "Command:" msgstr "" #, c-format msgid "Help topic does not exist: %s" msgstr "" #, c-format msgid "No such command: %s" msgstr "" msgid "unknown color" msgstr "Onbekende kleur" msgid "failed to open configuration file" msgstr "" #, c-format msgid "invalid configuration directive: \"%s\"" msgstr "" msgid "" "Pre-3.0.0 configuration file format detected, please upgrade running " "`calcurse-upgrade`." msgstr "" #, c-format msgid "configuration variable unknown: \"%s\"" msgstr "" #, c-format msgid "wrong configuration variable format for \"%s\"" msgstr "" msgid "layout configuration" msgstr "layout configuratie" msgid "Foreground" msgstr "Voorgrond" msgid "Background" msgstr "Achtergrond" msgid "(terminal's default)" msgstr "standaard van terminal" msgid "color theme" msgstr "Kleurthema" msgid "(if set to YES, compact panels are used)" msgstr "" msgid "Calendar" msgstr "Kalender" msgid "Appointments" msgstr "Afspraken" msgid "TODO" msgstr "" msgid "(specifies the panel that is selected by default)" msgstr "" msgid "(if set to YES, automatic save is done when quitting)" msgstr "(Bij JA, wordt er automatisch opgeslagen bij einde programma)" msgid "(run the garbage collector when quitting)" msgstr "" msgid "(if not null, automatically save data every 'periodic_save' minutes)" msgstr "" msgid "(if set to YES, confirmation is required before quitting)" msgstr "(Bij JA, wordt er een bevestiging gevraagd bij eindigen programma" msgid "(if set to YES, confirmation is required before deleting an event)" msgstr "(Bij JA, is een bevestiging nodig voor het wissen van een gebeurtenis)" msgid "(if set to YES, messages about loaded and saved data will be displayed)" msgstr "" msgid "(if set to YES, progress bar will be displayed when saving data)" msgstr "" msgid "Monday" msgstr "" msgid "Sunday" msgstr "" msgid "(specifies the first day of week in the calendar view)" msgstr "" msgid "(Format of the date to be displayed in non-interactive mode)" msgstr "(Formaat van de datum in niet-interactieve modus)" msgid "(Format to be used when entering a date: " msgstr "Het te gebruiken formaat bij datuminvoer: " msgid "Enter an option number to change its value" msgstr "Voer een nummer in om de waarde te veranderen" msgid "(Press '^P' or '^N' to move up or down, 'Q' to quit)" msgstr "" "(Druk '^P' of '^N' om omhoog of omlaag te bewegen, 'Q' om af te sluiten)" msgid "Enter the date format (see 'man 3 strftime' for possible formats) " msgstr "Geef het formaat van de datum (zie 'man 3 strftime')" msgid "Enter the date format: " msgstr "" msgid "Enter the delay, in minutes, between automatic saves (0 to disable) " msgstr "" "Voer het tijdsinterval in minuten voor automatisch opslaan (0 om dit uit te " "schakelen)" msgid "general options" msgstr "Algemene opties" msgid "Undefined option!" msgstr "Niet gekende optie!" msgid "undefined" msgstr "Ongekend" msgid "keys configuration" msgstr "Toetsinstellingen" msgid "Press the key you want to assign to:" msgstr "Druk de toets die u wilt toewijzen:" msgid "This key is not yet recognized by calcurse, please choose another one." msgstr "Deze toets wordt nog niet door Calcurse herkend, kies een andere aub." #, c-format msgid "This key is already in use for %s, please choose another one." msgstr "Deze toets is al in gebruik voor %s, kies aub een andere." msgid "Some actions do not have any associated key bindings!" msgstr "" msgid "" "Sorry, colors are not supported by your terminal\n" "(Press [ENTER] to continue)" msgstr "" "Helaas wordt kleur niet door uw terminal ondersteund.\n" "(druk op [ENTER] om door te gaan)" msgid "unknown item type" msgstr "ongekend type item" msgid "Event:" msgstr "" msgid "Appointment:" msgstr "" #, c-format msgid "Could not stop daemon properly: %s\n" msgstr "Kon de deamon niet stoppen: %s\n" #, c-format msgid "terminated at %s with signal %d\n" msgstr "gestopt bij %s met signaal %d\n" #, c-format msgid "Could not remove daemon lock file: %s\n" msgstr "" #, c-format msgid "Could not fork: %s\n" msgstr "" #, c-format msgid "Could not detach from the controlling terminal: %s\n" msgstr "Kon niet van de control terminal loskoppelen: %s\n" #, c-format msgid "Could not change working directory: %s\n" msgstr "" msgid "Cannot daemonize, aborting\n" msgstr "" msgid "Could not set lock file\n" msgstr "" #, c-format msgid "Could not access \"%s\": %s\n" msgstr "Geen toegang tot \"%s\": %s\n" #, c-format msgid "started at %s\n" msgstr "" msgid "error loading next appointment\n" msgstr "fout bij laden van volgende afspraak\n" #, c-format msgid "launching notification at %s for: \"%s\"\n" msgstr "" msgid "error while sending notification\n" msgstr "fout bij verzenden notificatie\n" #, c-format msgid "sleeping at %s for %d second\n" msgid_plural "sleeping at %s for %d seconds\n" msgstr[0] "" msgstr[1] "" #, c-format msgid "awakened at %s\n" msgstr "" #, c-format msgid "Could not stop calcurse daemon: %s\n" msgstr "" msgid "date error in event" msgstr "datumfout in gebeurtenis" msgid "date error in the event\n" msgstr "" msgid "Internal error: line too long" msgstr "Interne fout: lijn te lang" msgid "out of memory" msgstr "" msgid "unknown ical type" msgstr "onbekend ical type" msgid "recurrence frequence not found." msgstr "herhalingsfrequentie niet gevonden." msgid "recurrence frequence not recognized." msgstr "herhalingsfrequentie niet herkend" msgid "recurrence rule malformed." msgstr "herhalingsregel onjuist" msgid "recurrence exception dates malformed." msgstr "herhaling exceptie datum onjuist" msgid "could not get entire item description." msgstr "onvolledige item omschrijving" msgid "description malformed." msgstr "omschrijving beschadigd" msgid "appointment has no start time." msgstr "afspraak heeft geen begintijd." msgid "could not compute duration (no end time)." msgstr "kan tijdsduur niet berekenen (geen eindtijd)." msgid "item has a negative duration." msgstr "item heeft een negatieve tijdsduur" msgid "event date is not defined." msgstr "datum van de gebeurtenis is niet gespecifieerd" msgid "item could not be identified." msgstr "item onbekend" msgid "could not retrieve item summary." msgstr "kan item onderwerp niet ophalen" msgid "could not retrieve event start time." msgstr "kan begintijd van gebeurtenis niet ophalen" msgid "could not retrieve event end time." msgstr "kan eindtijd van gebeurtenis niet ophalen" msgid "item duration malformed." msgstr "item tijdsduur onjuist" msgid "The ical file seems to be malformed. The end of item was not found." msgstr "Ical-bestand oogt onjuist. Het einde van item niet gevonden." msgid "item priority is not acceptable (must be between 1 and 9)." msgstr "Prioriteit van item is onjuist (kies nr tussen 1 en 9)" msgid "Warning: ical header malformed or wrong version number. Aborting..." msgstr "Pas op: ical header onjuist of verkeerde versie. Stoppen..." msgid "Saving..." msgstr "Opslaan..." msgid "Loading..." msgstr "Laden..." msgid "Exporting..." msgstr "Exporteren..." msgid "Internal error while displaying progress bar" msgstr "Interne fout bij het tonen van de voortgangsbalk" msgid "Choose the file used to export calcurse data:" msgstr "Kies het bestand om calcurse data naar te exporteren:" msgid "The file cannot be accessed, please enter another file name." msgstr "Het bestand is ontoegankelijk, kies een andere bestandsnaam." msgid "Press [ENTER] to continue." msgstr "[ENTER]-toets om door te gaan." #, c-format msgid "Failed to open \"%s\", - %s\n" msgstr "Fout bij openen \"%s\", - %s\n" msgid "Failed to build message\n" msgstr "" #, c-format msgid "Failed to print message \"%s\"\n" msgstr "" #, c-format msgid "Failed to close \"%s\" - %s\n" msgstr "Fout bij sluiten \"%s\" - %s\n" #, c-format msgid "%s does not exist" msgstr "" msgid "Problems accessing data file ..." msgstr "Probleem bij benaderen databestand ..." msgid "The data files were successfully saved" msgstr "De databestanden zijn met succes opgeslagen" msgid "Press [ENTER] to continue" msgstr "Druk op [ENTER] om door te gaan)" msgid "failed to open appointment file" msgstr "Afsprakenbestand niet kunnen openen" msgid "syntax error in the item date" msgstr "" msgid "no event nor appointment found" msgstr "Geen gebeurtenis of afspraak gevonden" msgid "syntax error in item time or duration" msgstr "syntaxfout in itemtijd of duurtijd van het item" msgid "syntax error in item identifier" msgstr "" msgid "wrong format in the appointment or event" msgstr "fout formaat in de afspraak of gebeurtenis" msgid "syntax error in item repetition" msgstr "syntaxfout in de herhaling van het item" msgid "failed to open todo file" msgstr "kon het todo-bestand niet openen" msgid "The data files were reloaded successfully" msgstr "" msgid "There are unsaved modifications:" msgstr "" msgid "(d)iscard" msgstr "" msgid "(m)erge" msgstr "" msgid "(k)eep and cancel" msgstr "" msgid "[dmk]" msgstr "" msgid "failed to open key file" msgstr "" msgid "" "\n" "Too many errors while reading configuration file!\n" "Please backup your keys file, remove it from directory, and launch calcurse " "again.\n" msgstr "" "\n" "Teveel fouten tijdens het lezen van het configuratiebestand!\n" "Maak een backup van het sneltoetsenbestand, verwijder het van de map en " "start calcurse opnieuw op.\n" msgid "Could not read key label" msgstr "" msgid "Key label not recognized" msgstr "" #, c-format msgid "Error reading key: \"%s\"" msgstr "" #, c-format msgid "\"%s\" assigned multiple times!" msgstr "\"%s\" meer dan eens toegewezen!" msgid "There were some errors when loading keys file, see log file?" msgstr "" msgid "Too many errors while reading keys file, aborting..." msgstr "" "Teveel fouten bij het laden van het sneltoetsenbestand, wordt afgebroken ..." #, c-format msgid "FATAL ERROR: could not create %s: %s\n" msgstr "FATALE FOUT: kan %s niet aanmaken: %s\n" msgid "Welcome to Calcurse. Missing data files were created." msgstr "Welkom bij Calcurse. De missende databestanden zijn aangemaakt." msgid "Data files found. Data will be loaded now." msgstr "Databestanden gevonden. Data wordt geladen." msgid "The data were successfully exported" msgstr "De data is met succes geëxporteerd" msgid "unknown export type" msgstr "onbekend exporttype" msgid "wrong export mode" msgstr "foute exportmodus" msgid "Enter the file name to import data from:" msgstr "Kies het bestand voor het importeren van data:" #, c-format msgid "Import process report: %04d lines read" msgstr "" msgid "unknown import type" msgstr "onbekend type om te importeren" msgid "FATAL ERROR: the input file cannot be accessed, Aborting..." msgstr "FATALE FOUT: invoerbestand niet toegankelijk, Afbreken..." msgid "FATAL ERROR: wrong import mode" msgstr "FATALE FOUT: foute import modus" #, c-format msgid "%d app" msgid_plural "%d apps" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d event" msgid_plural "%d events" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d todo" msgid_plural "%d todos" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d skipped" msgstr "" msgid "Some items could not be imported, see log file?" msgstr "" msgid "Warning: could not open temporary log file, Aborting..." msgstr "Pas op: kan tijdelijk logbestand niet openen, Stoppen..." msgid "Warning: could not create temporary log file, Aborting..." msgstr "" msgid "No log file to display!" msgstr "" #, c-format msgid "Warning: could not erase temporary log file %s, Aborting..." msgstr "" "Waarschuwing: kon het tijdelijke logbestand %s niet verwijderen. Afbreken ..." msgid "Invalid delay" msgstr "" #, c-format msgid "" "\n" "WARNING: it seems that another calcurse instance is already running.\n" "If this is not the case, please remove the following lock file: \n" "\"%s\"\n" "and restart calcurse.\n" msgstr "" msgid "Cancel" msgstr "" msgid "Select" msgstr "Selecteer" msgid "Credits" msgstr "" msgid "Help" msgstr "Hulp" msgid "Quit" msgstr "Einde" msgid "Save" msgstr "Opslaan" msgid "Reload" msgstr "" msgid "Copy" msgstr "" msgid "Paste" msgstr "Plak" msgid "Chg Win" msgstr "" msgid "Import" msgstr "Import" msgid "Export" msgstr "Export" msgid "Go to" msgstr "Ga naar" msgid "OtherCmd" msgstr "AnderCmd" msgid "Config" msgstr "Config" msgid "Redraw" msgstr "Ververs" msgid "Add Appt" msgstr "Nieuw Afspr" msgid "Add Todo" msgstr "Nieuw Taak" msgid "-1 Day" msgstr "-1 Dag" msgid "+1 Day" msgstr "+1 Dag" msgid "-1 Week" msgstr "-1 Week" msgid "+1 Week" msgstr "+1 Week" msgid "-1 Month" msgstr "" msgid "+1 Month" msgstr "" msgid "-1 Year" msgstr "" msgid "+1 Year" msgstr "" msgid "Nxt View" msgstr "" msgid "Prv View" msgstr "" msgid "Today" msgstr "Vandaag" msgid "Command" msgstr "" msgid "Right" msgstr "Rechts" msgid "Left" msgstr "Links" msgid "Down" msgstr "Omlaag" msgid "Up" msgstr "Omhoog" msgid "beg Week" msgstr "beg Week" msgid "end Week" msgstr "eind Week" msgid "Add Item" msgstr "Nieuw Itm" msgid "Del Item" msgstr "Wis Item" msgid "Edit Itm" msgstr "Wzg Itm" msgid "View" msgstr "Bekijken" msgid "Pipe" msgstr "" msgid "Flag Itm" msgstr "Vlag Itm" msgid "Repeat" msgstr "Herhalen" msgid "EditNote" msgstr "WzgNoot" msgid "ViewNote" msgstr "BekijkNoot" msgid "Prio.+" msgstr "Prio.+" msgid "Prio.-" msgstr "rio.-" msgid "" "#\n" "# Calcurse keys configuration file\n" "#\n" "# This file sets the keybindings used by Calcurse.\n" "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n" "# To assign a keybinding to an action, this file must contain a line\n" "# with the following syntax:\n" "#\n" "# ACTION KEY1 KEY2 ... KEYn\n" "#\n" "# Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn\n" "# will be pressed.\n" "#\n" "# To define bindings which use the CONTROL key, prefix the key with 'C-'.\n" "# The escape, space bar and horizontal Tab key can be specified using\n" "# the 'ESC', 'SPC' and 'TAB' keyword, respectively.\n" "# Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords.\n" "# Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END'\n" "# keywords.\n" "#\n" "# A description of what each ACTION keyword is used for is available\n" "# from calcurse online configuration menu.\n" msgstr "" msgid "FATAL ERROR: could not create default keys file." msgstr "" msgid "FATAL ERROR: key value out of bounds" msgstr "" msgid "General" msgstr "Algemeen" msgid "Layout" msgstr "Layout" msgid "Sidebar" msgstr "Zijbalk" msgid "Color" msgstr "Kleur" msgid "Notify" msgstr "Info" msgid "Keys" msgstr "Toetsen" msgid "Unknown" msgstr "" msgid "Cancel the ongoing action." msgstr "" msgid "Select the highlighted item." msgstr "Selecteer het gemarkeerde bestand" msgid "Print general information about calcurse's authors, license, etc." msgstr "Geef algemene informatie van de auteurs, licentie, etc. weer." msgid "Display hints whenever some help screens are available." msgstr "" msgid "Exit from the current menu, or quit calcurse." msgstr "Verlaat het huidige menu, of verlaat Calcurse." msgid "Save calcurse data." msgstr "" msgid "Reload appointments and todo items." msgstr "" msgid "Copy the item that is currently selected." msgstr "" msgid "Paste an item at the current position." msgstr "" msgid "Select next panel in calcurse main screen." msgstr "" msgid "Import data from an external file." msgstr "Importeer gegevens uit een extern bestand." msgid "Export data to a new file format." msgstr "Exporteer gegevens naar een nieuw bestandsformaat" msgid "Select the day to go to." msgstr "Secteer een datum om naartoe te gaan" msgid "Show next possible actions inside status bar." msgstr "" msgid "Enter the configuration menu." msgstr "Ga naar het configuratiemenu." msgid "Redraw calcurse's screen." msgstr "Ververs het scherm" msgid "Add an appointment, whichever panel is currently selected." msgstr "" msgid "Add a todo item, whichever panel is currently selected." msgstr "" msgid "" "Move to previous day in calendar, whichever panel is currently selected." msgstr "" msgid "Move to next day in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous week in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next week in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous month in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next month in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous year in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next year in calendar, whichever panel is currently selected." msgstr "" msgid "Scroll window down (e.g. when displaying text inside a popup window)." msgstr "" msgid "Scroll window up (e.g. when displaying text inside a popup window)." msgstr "" msgid "Go to today, whichever panel is selected." msgstr "" msgid "Enter command mode." msgstr "" msgid "Move to the right." msgstr "Ga naar rechts." msgid "Move to the left." msgstr "Ga naar links." msgid "Move down." msgstr "Ga omlaag" msgid "Move up." msgstr "Ga omhoog" msgid "" "Select the first day of the current week when inside the calendar panel." msgstr "" msgid "Select the last day of the current week when inside the calendar panel." msgstr "" msgid "Add an item to the currently selected panel." msgstr "" msgid "Delete the currently selected item." msgstr "Verwijder huidig geselecteerde item" msgid "Edit the currently seleted item." msgstr "Wijzig huidig geselecteerde item" msgid "Display the currently selected item inside a popup window." msgstr "Geef het huidig geselecteerde item weer in een popup" msgid "Flag the currently selected item as important." msgstr "Markeer het huidig bestand als belangrijk" msgid "Repeat an item" msgstr "Herhaal item" msgid "Pipe the currently selected item to an external program." msgstr "" msgid "Attach (or edit if one exists) a note to the currently selected item" msgstr "" "Voeg een noot toe aan het huidig geselecteerde item (of wijzig dit indien " "bestaande)" msgid "View the note attached to the currently selected item." msgstr "Bekijk de noot toegevoegd aan het huidig geselecteerde item" msgid "Raise a task priority inside the todo panel." msgstr "" msgid "Lower a task priority inside the todo panel." msgstr "" msgid "FATAL ERROR: null file pointer." msgstr "" #, c-format msgid "When adding default key for \"%s\", \"%s\" was already assigned!" msgstr "" msgid "xmalloc: zero size" msgstr "" msgid "xmalloc: out of memory" msgstr "" msgid "xcalloc: zero size" msgstr "" msgid "xcalloc: overflow" msgstr "" msgid "xcalloc: out of memory" msgstr "" msgid "xrealloc: zero size" msgstr "" msgid "xrealloc: overflow" msgstr "" msgid "xrealloc: out of memory" msgstr "" msgid "could not allocate memory to store block info" msgstr "" msgid "Block not found" msgstr "" #, c-format msgid "overflow at %s" msgstr "" #, c-format msgid "dbg_free: null pointer at %s" msgstr "" #, c-format msgid "block seems already freed at %s" msgstr "" #, c-format msgid "corrupt block header at %s" msgstr "" #, c-format msgid "corrupt block end at %s, (end = %u, should be %d)" msgstr "" msgid "---==== MEMORY BLOCK ====----------------\n" msgstr "" #, c-format msgid " id: %u\n" msgstr "" #, c-format msgid " size: %u\n" msgstr "" #, c-format msgid " allocated in: %s\n" msgstr "" msgid "-----------------------------------------\n" msgstr "-----------------------------------------\n" msgid "+------------------------------+\n" msgstr "+------------------------------+\n" msgid "| calcurse memory usage report |\n" msgstr "" #, c-format msgid " number of calls: %u\n" msgstr "" #, c-format msgid " allocated blocks: %u\n" msgstr "" #, c-format msgid " unfreed blocks: %u\n" msgstr "" #, c-format msgid "Warning: could not open %s, Aborting..." msgstr "Pas op: bestand %s niet te openen. Stoppen..." msgid "error while launching command: could not fork" msgstr "" msgid "error while launching command" msgstr "fout bij uitvoeren commando" msgid "(if set to YES, notify-bar will be displayed)" msgstr "(Bij JA, wordt de informatiebalk weergegeven)" msgid "(Format of the date to be displayed inside notify-bar)" msgstr "(Formaat van de datum in de informatiebalk.)" msgid "(Format of the time to be displayed inside notify-bar)" msgstr "(Formaat van de tijd in de informatiebalk.)" msgid "" "(Warn user if an appointment is within next 'notify-bar_warning' seconds)" msgstr "" "Meldt gebruiker dat er een afspraak binnen 'informatiebalk_waarschuwing' " "seconden is" msgid "(Command used to notify user of an upcoming appointment)" msgstr "(Commando dat melding geeft van op handen zijnde afspraak)" msgid "(Notify all appointments instead of flagged ones only)" msgstr "" msgid "(Run in background to get notifications after exiting)" msgstr "" msgid "(Log activity when running in background)" msgstr "" msgid "Enter the time format (see 'man 3 strftime' for possible formats) " msgstr "Geef het formaat van de tijd (zie 'man 3 strftime')" msgid "Enter the number of seconds (0 not to be warned before an appointment)" msgstr "Geef het aantal seconden (0 voor geen waarschuwing voor een afspraak)." msgid "Enter the notification command " msgstr "Geef het meldingscommando " msgid "notification options" msgstr "notificatie-opties" msgid "incoherent repetition type" msgstr "Herhalingstype is niet coherent" msgid "unknown repetition type" msgstr "" msgid "unknown character" msgstr "onbekend karakter" msgid "event not found" msgstr "Gebeurtenis niet gevonden" msgid "appointment not found" msgstr "afspraak niet gevonden" msgid "syntax error in item date" msgstr "syntaxfout in datum van item" msgid "date error in item exception" msgstr "" #, c-format msgid "Could not remove calcurse lock file: %s\n" msgstr "" #, c-format msgid "Error setting signal #%d : %s\n" msgstr "" msgid "no note attached" msgstr "geen noot bijgevoegd" msgid "no such todo" msgstr "Er is zo geen todo" msgid "todo not found" msgstr "todo niet gevonden" msgid "ERROR setting first day of week" msgstr "FOUT in het instellen van de eerste dag van de week" #, fuzzy msgid "The day you entered is not valid" msgstr "Het ingevoerde interval is ongeldig." #, c-format msgid "Enter the day to go to [ENTER for today] : %s" msgstr "" msgid "Enter start time ([hh:mm] or [hhmm]):" msgstr "" msgid "Press [Enter] to continue" msgstr "Druk op [Enter] om door te gaan)" msgid "You entered an invalid time, should be [hh:mm] or [hhmm]" msgstr "" msgid "Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):" msgstr "" msgid "Invalid time: start time must be before end time!" msgstr "Ongeldige tijd: aanvangstijd moet voor eindtijd zijn!" msgid "Enter the new item description:" msgstr "Voer een nieuwe beschrijving in:" msgid "Enter the new repetition type:" msgstr "" msgid "(d)aily" msgstr "(d)agelijks" msgid "(w)eekly" msgstr "(w)ekelijks" msgid "(m)onthly" msgstr "(m)aandelijks" msgid "(y)early" msgstr "(y)aarlijks" #, c-format msgid "(currently using %s)" msgstr "" msgid "[dwmy]" msgstr "[dwmy]" msgid "The frequence you entered is not valid." msgstr "Het ingevoerde interval is ongeldig." msgid "The entered date is not valid." msgstr "De ingevoerde datum is ongeldig." #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition." msgstr "" msgid "Enter the new repetition frequence:" msgstr "Voer herhalingsinterval in:" #, c-format msgid "Enter the new ending date: [%s] or '0'" msgstr "" msgid "Description" msgstr "" msgid "Repetition" msgstr "" msgid "Edit: " msgstr "Wijzig:" msgid "Start time" msgstr "" msgid "End time" msgstr "" msgid "Move" msgstr "" msgid "Pipe item to external command:" msgstr "" msgid "Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:" msgstr "" msgid "Enter description:" msgstr "" msgid "You entered an invalid start time, should be [hh:mm] or [hhmm]" msgstr "" msgid "" "Invalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], " "[+xxxdxxhxxm] or [+mm]" msgstr "" msgid "Do you really want to delete this item?" msgstr "" msgid "This item is recurrent. Delete (a)ll occurences or just this (o)ne?" msgstr "" msgid "[ao]" msgstr "" msgid "This item has a note attached to it. Delete (i)tem or just its (n)ote?" msgstr "" msgid "[in]" msgstr "" msgid "Enter the repetition type:" msgstr "" msgid "Enter the repetition frequence:" msgstr "Geef de herhalingsinterval:" #, c-format msgid "Enter the ending date: [%s] or '0' for an endless repetition" msgstr "Geef einddatum: [%s] of '0' voor oneindige herhaling" #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition" msgstr "Mogelijk formaat is: [%s] of '0' voor oneindig." msgid "This item is already a repeated one." msgstr "Dit item wordt al herhaald." msgid "Sorry, the date you entered is older than the item start time." msgstr "Sorry, de ingevoerde datum is ouder dan de aanvangstijd." msgid "wrong item type" msgstr "" msgid "Enter the new TODO item:" msgstr "" msgid "Enter the TODO priority [1 (highest) - 9 (lowest)]:" msgstr "" msgid "Do you really want to delete this task?" msgstr "" msgid "This item has a note attached to it. Delete (t)odo or just its (n)ote?" msgstr "" msgid "[tn]" msgstr "" msgid "Enter the new TODO description:" msgstr "" msgid "TODO:" msgstr "" msgid "/!\\ INTERNAL ERROR /!\\" msgstr "/!\\ INTERNE FOUT /!\\" msgid "Please report the following bug:" msgstr "Rapporteer aub de volgende fout:" msgid "[yn]" msgstr "" msgid "Press any key to continue..." msgstr "Druk op een toets om door te gaan..." msgid "failure in mktime" msgstr "fout in mktime" msgid "error in mktime" msgstr "fout in mktime" msgid "yes" msgstr "ja" msgid "no" msgstr "nee" msgid "option not defined" msgstr "" #, c-format msgid "temporary file \"%s\" could not be created" msgstr "" #, c-format msgid "Error when closing file at %s" msgstr "" msgid "No note file found\n" msgstr "Noot-bestand niet gevonden\n" msgid "January" msgstr "januari" msgid "February" msgstr "februari" msgid "March" msgstr "maart" msgid "April" msgstr "april" msgid "May" msgstr "mei" msgid "June" msgstr "juni" msgid "July" msgstr "juli" msgid "August" msgstr "augustus" msgid "September" msgstr "september" msgid "October" msgstr "oktober" msgid "November" msgstr "november" msgid "December" msgstr "december" msgid "Sun" msgstr " zo" msgid "Mon" msgstr " ma" msgid "Tue" msgstr " di" msgid "Wed" msgstr " wo" msgid "Thu" msgstr " do" msgid "Fri" msgstr " vr" msgid "Sat" msgstr " za" msgid "mm/dd/yyyy" msgstr "" msgid "dd/mm/yyyy" msgstr "" msgid "yyyy/mm/dd" msgstr "" msgid "yyyy-mm-dd" msgstr "" msgid "unknown panel" msgstr "" msgid "Usage: calcurse-upgrade [-h|-v|--config ]" msgstr "" msgid "unrecognized option:" msgstr "" msgid "Configuration file not found:" msgstr "Configuratiebestand niet gevonden:" msgid "Pre-3.0.0 configuration file format detected..." msgstr "" msgid "Create temporary backup of the configuration file..." msgstr "" msgid "Old backup file found:" msgstr "" msgid "" "\n" "If a previous conversion did not complete, please try to restore your\n" "configuration from this backup and then remove the backup file." msgstr "" msgid "done" msgstr "klaar" msgid "Old temporary file found:" msgstr "" msgid "" "\n" "If a previous conversion did not complete, please try to remove this file " "and\n" "start over with a backup of your old configuration file." msgstr "" msgid "Upgrade configuration directives..." msgstr "" msgid "Remove temporary backup..." msgstr "" #~ msgid "Argument to the '-d' flag is not valid\n" #~ msgstr "Argument van '-d' is niet geldig.\n" #~ msgid "Argument is not valid\n" #~ msgstr "Argument is niet geldig.\n" #~ msgid "Argument format for -r and --range is: 'n'\n" #~ msgstr "Argument formaat voor -r en --range is: 'n'\n" #~ msgid "Argument for '-x' should be either 'ical' or 'pcal'\n" #~ msgstr "Argument voor '-x' moet of 'ical' of 'pcal' zijn\n" #~ msgid "" #~ "Option '-S' must be used with either '-d', '-r', '-s', '-a' or '-t'\n" #~ msgstr "" #~ "Optie '-S' moet met een van volgende worden gebruikt '-d', '-r', '-s', '-" #~ "a','-' of '-t'\n" #~ msgid "aborting...\n" #~ msgstr "afbreken...\n" #~ msgid "%s successfully created\n" #~ msgstr "%s met succes aangemaakt\n" #~ msgid "starting interactive mode...\n" #~ msgstr "interactieve modus gestart...\n" #~ msgid "" #~ "The day you entered is not valid (should be between 01/01/1902 and " #~ "12/31/2037)" #~ msgstr "" #~ "De ingevoerde datum is ongeldig (voer datum tussen 01/01/1902 en " #~ "12/31/2037) in" calcurse-4.0.0/po/stamp-po0000644000175000017500000000001212472330423012327 00000000000000timestamp calcurse-4.0.0/po/fr.gmo0000644000175000017500000010772612472330423012003 00000000000000Þ•} ýìàKá‡- †µ †‰8È8Î8Ò8Ö8Ý8 â8Dí8F29Ey9E¿9H:IN:H˜:Há:*;<;O;X;p;„;‹;”;;¥;¼;Ö;ß;&å; <<80< i<:Š<;Å<X=/Z=Š=¤=¿=Ù=$ö=A>]>d> k>Œ>•>,š>Ç>Î>è>? ? ?$?*?.?3? G?EQ?C—?Û?*â? @H&@o@GŒ@ Ô@-Þ@ A5ALJA>—A ÖAáAåAìA&òA#B=B<\B'™BCÁB$C=*CFhC¯C³C4¹C(îCDD-D#0D/TD„D6‰DÀD9ÉD;E'?E7gECŸEãE5çE<FZF_FfFkFpFuFzF™F¯F¿FÈFèFG+G KGWG$iG1ŽGÀG-ÛG) H&3H"ZH$}H ¢HÃHÝHñH I 'I2IIINIWIgI‡I-¥I!ÓIõIJ J!@JbJzJ“J¥JµJ%ÐJöJK-K:KK†K'™KÁK ÖKáKôK÷KL'L ;LHL ]LjL }L‹L%šLÀL$àLM< M]MlM†M¦M%ÆMìM( N 3NTN\N kNuN ‡N•N©N»NÏN áNïNO,OIO([O„O”O«O½OÐOçOúOP%P9P =P HP!SPµuPP+R­|R¨*S¯ÓSÀƒTDUYUpUU U¸U#ÎUòUúY Z (Z4Z\IZ6¦Z=ÝZ=[(Y[?‚[ZÂ[U\Ms\`Á\"] 6]KD]L]OÝ]C-^jq^:Ü^M_ e_&o_A–_!Ø_ú_ `!`8`@`H`P`*V`+`­`µ`½`Å`Ë`â`ê` ò`3ý`71a.ia ˜a ¥a±aJ·ab bb1'b Ybdb4b´b6½bôb üb c&c#8c4\c5‘cÇc+âc8d7Gd%d.¥d1ÔdDeLKe ˜e ¢e$¬e ÑeLÝeC*fnfŒf.f¿f#Èf ìf÷f g5 g CgKdg°g^ÌgV+h@‚h>Ãh,i+/i/[i(‹i"´iW×i&/j VjNwj%Æj(ìj,k‘Bk Ôk,ákl8l)Plzl-‰lK·l*m).mDXm*m$Èmím n*-nXnan2jn nªn ®n¸n9Ánûno+ oO5o"…o¨oM¸oppp!p =pHpOp Vp?dpG¤pIìp6q;q?qCq Iq SqK`qK¬qRøqPKrOœrOìrVy‹¸‹-É‹,÷‹5$Œ:ZŒ,•Œ1ÂŒ!ôŒ #6?Rc~«ÄÔñ7Ž?Ž3\ŽŽ"«ŽÎŽåŽ"üŽ#6ZrŠ Ž ™1¤-Щ"‹ßL0/i g° NìûK¥_½2ÌVdk ùJfE™{H+Þ,Pamu^mL3Yt}Ÿb@²ÉïÂÿT‘ÑgU=Ö#|¾ú†9hl?挤•»· ¶BD]<[`/d¡“7åÄxT\—¨ô1nËZ€Ç|Á;HÛZ6Ý ¬Ei0Í%4vp5a…BMY.)–´\ªšó¸:R2kM‰$Õ&ÈñäeuvcŽ[SÅF*GÒ])XÓ7R*Q¹öSA§ác6C^y5÷Dœ!Ã'eà³jo_VN˜ºJ@({òQ<î‡â8#¼Ê¯ë zþ"ýl OhfOø};.qµ> qè,ÜíØ~3'”ÔzIxêUõ Ú›>ãjK£` ×Cð®P?:1tnWsrüÏy%owA¦ç4($+s±!„ÆÙ-p8ˆGrÀ&¿Î­«9  ƒžIw‚XWF éb¢Š’= For more information, type '?' from within Calcurse, or read the manpage. If a previous conversion did not complete, please try to remove this file and start over with a backup of your old configuration file. If a previous conversion did not complete, please try to restore your configuration from this backup and then remove the backup file. Too many errors while reading configuration file! Please backup your keys file, remove it from directory, and launch calcurse again. WARNING: it seems that another calcurse instance is already running. If this is not the case, please remove the following lock file: "%s" and restart calcurse. id: %u size: %u unfreed blocks: %u allocated in: %s number of calls: %u allocated blocks: %u "%s" assigned multiple times!# # Calcurse keys configuration file # # This file sets the keybindings used by Calcurse. # Lines beginning with "#" are comments, and ignored by Calcurse. # To assign a keybinding to an action, this file must contain a line # with the following syntax: # # ACTION KEY1 KEY2 ... KEYn # # Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn # will be pressed. # # To define bindings which use the CONTROL key, prefix the key with 'C-'. # The escape, space bar and horizontal Tab key can be specified using # the 'ESC', 'SPC' and 'TAB' keyword, respectively. # Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords. # Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END' # keywords. # # A description of what each ACTION keyword is used for is available # from calcurse online configuration menu. %d app%d apps%d event%d events%d skipped%d todo%d todos(Command used to notify user of an upcoming appointment)(Format of the date to be displayed in non-interactive mode)(Format of the date to be displayed inside notify-bar)(Format of the time to be displayed inside notify-bar)(Format to be used when entering a date: (Log activity when running in background)(Notify all appointments instead of flagged ones only)(Press '^P' or '^N' to move up or down, 'Q' to quit)(Run in background to get notifications after exiting)(Warn user if an appointment is within next 'notify-bar_warning' seconds)(currently using %s)(d)aily(if not null, automatically save data every 'periodic_save' minutes)(if set to YES, automatic save is done when quitting)(if set to YES, confirmation is required before deleting an event)(if set to YES, confirmation is required before quitting)(if set to YES, messages about loaded and saved data will be displayed)(if set to YES, notify-bar will be displayed)(if set to YES, progress bar will be displayed when saving data)(m)onthly(run the garbage collector when quitting)(specifies the first day of week in the calendar view)(terminal's default)(w)eekly(y)early+------------------------------+ +1 Day+1 Month+1 Week+1 Year----------------------------------------- ---==== MEMORY BLOCK ====---------------- -1 Day-1 Month-1 Week-1 Year/!\ INTERNAL ERROR /!\Add ApptAdd ItemAdd TodoAdd a todo item, whichever panel is currently selected.Add an appointment, whichever panel is currently selected.Add an item to the currently selected panel.Appointment:AppointmentsAprilAttach (or edit if one exists) a note to the currently selected itemAugustBackgroundBlock not foundCalcurse %s - text-based organizer CalendarCancel the ongoing action.Cannot daemonize, aborting Chg WinChoose the file used to export calcurse data:ColorCommand:ConfigConfiguration file not found:Could not access "%s": %s Could not change working directory: %s Could not detach from the controlling terminal: %s Could not fork: %s Could not read key labelCould not remove calcurse lock file: %s Could not remove daemon lock file: %s Could not set lock file Could not stop calcurse daemon: %s Could not stop daemon properly: %s Create temporary backup of the configuration file...Data files found. Data will be loaded now.DecemberDel ItemDelete the currently selected item.DescriptionDisplay hints whenever some help screens are available.Display the currently selected item inside a popup window.Do you really want to quit?DownERROR setting first day of weekEdit ItmEdit the currently seleted item.Edit: EditNoteEnd timeEnter an option number to change its valueEnter the configuration menu.Enter the date format (see 'man 3 strftime' for possible formats) Enter the date format: Enter the day to go to [ENTER for today] : %sEnter the delay, in minutes, between automatic saves (0 to disable) Enter the ending date: [%s] or '0' for an endless repetitionEnter the file name to import data from:Enter the new ending date: [%s] or '0'Enter the new item description:Enter the new repetition frequence:Enter the new repetition type:Enter the notification command Enter the number of seconds (0 not to be warned before an appointment)Enter the repetition frequence:Enter the repetition type:Enter the time format (see 'man 3 strftime' for possible formats) Error reading key: "%s"Error setting signal #%d : %s Error when closing file at %sError: both calcurse (pid: %d) and its daemon (pid: %d) seem to be running at the same time! Please check manually and restart calcurse. Event:Exit from the current menu, or quit calcurse.ExportExport data to a new file format.Export to (i)cal or (p)cal format?Exporting...FATAL ERROR: could not create %s: %s FATAL ERROR: could not create default keys file.FATAL ERROR: key value out of boundsFATAL ERROR: null file pointer.FATAL ERROR: the input file cannot be accessed, Aborting...FATAL ERROR: wrong import modeFailed to build message Failed to close "%s" - %s Failed to open "%s", - %s Failed to print message "%s" FebruaryFlag ItmFlag the currently selected item as important.ForegroundFriGeneralGo toGo to today, whichever panel is selected.HelpImportImport data from an external file.Internal error while displaying progress barInternal error: line too longInvalid delayInvalid time: start time must be before end time!JanuaryJulyJuneKey label not recognizedKeysLayoutLeftLoading...Lower a task priority inside the todo panel.Mail bug reports to . Mail feature requests and suggestions to . MarchMayMonMondayMoveMove down.Move to next day in calendar, whichever panel is currently selected.Move to next month in calendar, whichever panel is currently selected.Move to next week in calendar, whichever panel is currently selected.Move to next year in calendar, whichever panel is currently selected.Move to previous day in calendar, whichever panel is currently selected.Move to previous month in calendar, whichever panel is currently selectedMove to previous week in calendar, whichever panel is currently selectedMove to previous year in calendar, whichever panel is currently selectedMove to the left.Move to the right.Move up.No log file to display!No note file found NotifyNovemberNxt ViewOctoberOld backup file found:Old temporary file found:OtherCmdPastePaste an item at the current position.PipePipe item to external command:Pipe the currently selected item to an external program.Please report the following bug:Possible formats are [%s] or '0' for an endless repetitionPossible formats are [%s] or '0' for an endless repetition.Pre-3.0.0 configuration file format detected, please upgrade running `calcurse-upgrade`.Pre-3.0.0 configuration file format detected...Press [ENTER] to continuePress [ENTER] to continue.Press [Enter] to continuePress any key to continue...Press the key you want to assign to:Print general information about calcurse's authors, license, etc.Prio.+Prio.-Problems accessing data file ...Prv ViewQuitRaise a task priority inside the todo panel.RedrawRedraw calcurse's screen.Remove temporary backup...RepeatRepeat an itemRepetitionRightSatSaveSave calcurse data.Saving...Scroll window down (e.g. when displaying text inside a popup window).Scroll window up (e.g. when displaying text inside a popup window).SelectSelect next panel in calcurse main screen.Select the day to go to.Select the first day of the current week when inside the calendar panel.Select the highlighted item.Select the last day of the current week when inside the calendar panel.SeptemberShow next possible actions inside status bar.SidebarSome actions do not have any associated key bindings!Sorry, colors are not supported by your terminal (Press [ENTER] to continue)Sorry, the date you entered is older than the item start time.Start timeSunSundayTODO:The data files were successfully savedThe data were successfully exportedThe entered date is not valid.The file cannot be accessed, please enter another file name.The frequence you entered is not valid.The ical file seems to be malformed. The end of item was not found.This item is already a repeated one.This key is already in use for %s, please choose another one.This key is not yet recognized by calcurse, please choose another one.ThuTodayToo many errors while reading keys file, aborting...Try 'calcurse -h' for more information. TueUndefined option!UpUpgrade configuration directives...Usage: calcurse-upgrade [-h|-v|--config ]ViewView the note attached to the currently selected item.ViewNoteWarning: could not create temporary log file, Aborting...Warning: could not erase temporary log file %s, Aborting...Warning: could not open %s, Aborting...Warning: could not open temporary log file, Aborting...Warning: ical header malformed or wrong version number. Aborting...WedWelcome to Calcurse. Missing data files were created.When adding default key for "%s", "%s" was already assigned![ao][dwmy][in][ip][tn][yn]appointment has no start time.appointment not foundawakened at %s beg Weekblock seems already freed at %scalcurse is not running calcurse is running (pid %d) calcurse is running in background (pid %d) color themecompleted tasks: configuration variable unknown: "%s"corrupt block end at %s, (end = %u, should be %d)corrupt block header at %scould not allocate memory to store block infocould not compute duration (no end time).could not get entire item description.could not retrieve event end time.could not retrieve event start time.could not retrieve item summary.date error in appointmentdate error in eventdate error in the event dbg_free: null pointer at %sdd/mm/yyyydescription malformed.doneend Weekerror in mktimeerror loading next appointment error while launching commanderror while launching command: could not forkerror while sending notification event date is not defined.event not foundfailed to open appointment filefailed to open configuration filefailed to open key filefailed to open todo filefailure in mktimegeneral optionsincoherent repetition typeinvalid configuration directive: "%s"item could not be identified.item duration malformed.item has a negative duration.item priority is not acceptable (must be between 1 and 9).keys configurationlaunching notification at %s for: "%s" layout configurationmm/dd/yyyynext appointment: nono event nor appointment foundno note attachedno such appointmentno such todonotification optionsnull pointeroption not definedout of memoryoverflow at %srecurrence exception dates malformed.recurrence frequence not found.recurrence frequence not recognized.recurrence rule malformed.sleeping at %s for %d second sleeping at %s for %d seconds started at %s syntax error in item datesyntax error in item identifiersyntax error in item repetitionsyntax error in item time or durationsyntax error in the item datetemporary file "%s" could not be createdterminated at %s with signal %d to do: todo not foundundefinedunknown characterunknown colorunknown export typeunknown ical typeunknown import typeunknown item typeunknown panelunknown repetition typeunrecognized option:wrong configuration variable format for "%s"wrong export modewrong format in the appointment or eventwrong item typexcalloc: out of memoryxcalloc: overflowxcalloc: zero sizexmalloc: out of memoryxmalloc: zero sizexrealloc: out of memoryxrealloc: overflowxrealloc: zero sizeyesyyyy-mm-ddyyyy/mm/dd| calcurse memory usage report | Project-Id-Version: calcurse Report-Msgid-Bugs-To: bugs@calcurse.org POT-Creation-Date: 2015-02-22 10:37+0100 PO-Revision-Date: 2014-08-03 21:51+0000 Last-Translator: Lukas Fleischer Language-Team: French (http://www.transifex.com/projects/p/calcurse/language/fr/) Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); Pour plus d'informations, tapez '?' dans Calcurse, ou lisez la page de manuel. Si une conversion précédente ne s'est pas terminée, veuillez essayer de supprimer ce fichier et recommencer avec une sauvegarde de votre ancien fichier de configuration. Si une précédente conversion n'a pas fonctionné, vous pouvez essayer de réparer votre configuration à partir de cette sauvegarde, puis de supprimer la sauvegarde. Trop d'erreurs à la lecture du fichier de configuration ! Veuillez faire une sauvegarde votre fichier de raccourcis, et le supprimer du répertoire, puis relancer calcurse. ATTENTION : il semble qu'une autre instance de calcurse soit en cours d'exécution. Si ce n'est pas le cas, veuillez supprimer le fichier de verrouillage suivant : "%s" et relancer calcurse. id : %u taille : %u blocs non libérés : %u alloué en : %s nombre d'appels : %u blocs alloués : %u "%s" est assignée plusieurs fois !# # Fichier de configuration des raccourcis de Calcurse # # Ce fichier définie les raccourcis clavier utilisés par Calcurse. # Les lignes débutant par "#" sont des commentaires ignorés par Calcurse. # Pour assigner un raccourci clavier à une action, ce fichier doit contenir une ligne # qui respecte la syntaxe suivante : # # ACTION TOUCHE1 TOUCHE2 ... TOUCHEn # # Où ACTION désigne la commande à exécuter lorsque TOUCHE1, TOUCHE2, ..., ou TOUCHEn # est pressée. # # Pour définir un raccourci utilisant la touche CONTRÔLE, préfixer la touche avec 'C-'. # Les touches échap, espace et tabulation horizontale peuvent être spécifiées en utilisant # les mots clefs respectifs ESC, SPC et TAB. # Les touches fléchées peuvent aussi être spécifiées avec les mots clefs UP, DWN, LFT, RGT. # Enfin les touches Début et Fin peuvent être assignées en utilisant les mots clefs KEY_HOME et KEY_END. # # Une description de ce que chaque ACTION fait est disponible # dans le menu de configuration de calcurse. %d app%d apps%d événement%d événements%d ignorés%d tâche%d tâches(Commande utilisée pour prévenir l'utilisateur d'un rendez-vous sur le point de commencer)(Format de la date à afficher en mode non-interactif)(Format de la date à afficher dans la barre de notification)(Format de l'heure à afficher dans la barre de notification)(Format utilisé pour saisir une date : (Enregistrer l'activité lors de l'exécution en arrière-plan)(Signaler tous les rendez-vous au lieu de se restreindre à ceux marqués comme important)(Utiliser '^P' ou '^N' pour se déplacer vers le haut ou le bas, et 'Q' pour quitter)(Lancer en arrière-plan pour obtenir les notifications après avoir quitter)(Alerte l'utilisateur si un rendez-vous se produit les prochaines 'notify-bar_warning' secondes)(actuellement : %s)quotidien (d)(enregistre automatiquement toutes les 'periodic_save' minutes, si non nul)(si fixé à OUI, une sauvegarde est automatiquement effectuée en quittant)(si fixé à OUI, il est nécessaire de confirmer avant d'effacer un élément)(si fixé à OUI, il est nécessaire de confirmer avant de quitter)(si fixé à OUI, les messages concernant le chargement et l'enregistrement des données seront affichés)(si fixé à OUI, la barre de notification sera affichée)(si fixé à OUI, la barre sera affichée lors de la sauvegarde des données)(m)ensuel(lance le ramasse-miettes en quittant)(indique le premier jour de la semaine dans la vue de calendrier)(valeurs par défaut du terminal)hebdomadaire (w)annuel (y)+------------------------------+ +1 Jour+1 Mois+1 Sem.+1 An----------------------------------------- ---==== BLOC MÉMOIRE ====---------------- -1 Jour-1 Mois-1 Sem.-1 An/!\ ERREUR INTERNE /!\Ajt rdvAjouterAjt tâcheAjouter une tâche, quel que soit le panneau actif.Ajouter un rendez-vous, quel que soit le panneau actif.Ajouter un élément au panneau sélectionné.Rendez-vous:Rendez-vousAvrilJoindre (ou modifier si elle existe) une note à l'élément sélectionnéAoûtArrière planBloc introuvableCalcurse %s - organiseur personnel en mode texte CalendrierAnnuler l'action en cours.Impossible de lancer le démon, annulation en cours Chg.Fen.Choisir le fichier vers lequel exporter les données :CouleurCommande:ConfigurerFichier de configuration introuvable :Impossible d'accéder à "%s" : %s impossible de changer le repertoire de travail : %s Impossible de se détacher du terminal appelant : %s Impossible de forker : %s Impossible de lire le libellé de la toucheImpossible d'effacer le fichier verrou de calcurse : %s Impossible de retirer le fichier verrou du démon : %s Impossible de vérouiller le fichier Impossible d'arrêter le démon calcurse : %s Impossible d'arrêter le démon normalement : %s Création d'une sauvegarde temporaire du fichier de configuration...Fichiers de données trouvés. Les données seront chargées immédiatement.DécembreSupprimerSupprimer l'élément sélectionné.DescriptionAfficher des notes chaque fois que certains écrans d'aide sont disponibles.Afficher l'élément sélectionner dans une fenêtre indépendante.Voulez-vous vraiment quitter?BasERREUR de saisie du premier jour de la semaineModifierModifier l'élément sélectionné.Modifier :EditNoteHeure de finSaisir le numéro d'une option pour changer sa valeurOuvrir le menu de configuration.Saisir le format de date (voir 'man 3 strftime' pour les formats possibles)Saisir le format de date : Saisir le jour auquel vous souhaitez vous rendre [ou simplement ENTRÉE pour aujourd'hui] : %sSaisir le délai, en minutes, entre deux sauvegardes automatiques (0 pour désactiver)Saisir la date de fin : [%s] ou '0' pour répéter indéfinimentSaisir le nom du fichier depuis lequel importer les données :Saisir la nouvelle date de fin : [%s] ou '0'Saisir la description du nouvel élément :Saisir la nouvelle fréquence de répétition :Saisir le nouveau type de répétition :Saisir la commande de notificationSaisir le nombre de secondes (0 pour désactiver l'alerte qui précéde un rendez-vous)Saisir la fréquence de répétition :Saisir le type de répétition :Saisir le format de l'heure (voir 'man 3 strftime' pour les formats possibles)Erreur de lecture de la touche : "%s"Erreur d'affectation du signal #%d : %s Erreur lors de la fermeture du fichier à %sErreur : calcurse (PID : %d) et son démon (PID : %d) semblent s'exécuter en même temps ! Veuillez verifier manuellement et relancer calcurse. Evènemment:Fermer le menu courant, ou quitter calcurse.ExporterExporter les données vers un nouveau format de fichier.Exporter vers le format (i)cal ou (p)cal?Exportation…ERREUR FATALE : impossible de créer %s : %s ERREUR FATALE : impossible de créer le fichier de raccourcis par défaut.ERREUR FATALE : valeur de clef hors limiteERREUR FATALE : pointeur de fichier nul.ERREUR FATALE : le fichier d'entrée n'a pu être ouvert, abandon...ERREUR FATALE : mode d'importation erronéImpossible de construire le message Impossible de fermer "%s" - %s Impossible d'ouvrir "%s", - %s Echec lors de l'affichage du message "%s" FévrierMarq rdvMarquer l'élément sélectionné comme important.Premier planVenGénéralAller àAller à la date du jour, quel que soit le panneau actif.AideImporterImporter les données d'un fichier externe.Une erreur interne s'est produite durant l'affichage de la barre de progressionErreur interne : ligne trop longueDélai invalideHeure invalide : l'heure de début doit être antérieure à l'heure de fin !JanvierJuilletJuinLibellé de la touche non reconnuRaccourcisÉcranGaucheChargement…Diminuer la priorité d'une tâche dans le panneau des tâches.Les rapports de bug sont à envoyer en anglais à . Vous pouvez envoyer vos remarques et suggestions à . MarsMaiLunLundiDéplacerVers le bas.Se déplacer au jour suivant du calendrier, quel que soit le panneau actif.Se déplacer au mois suivant du calendrier, quel que soit le panneau actif.Se déplacer à la semaine suivante du calendrier, quel que soit le panneau actif.Se déplacer à l'année suivante du calendrier, quel que soit le panneau actif.Se déplacer au jour précédent du calendrier, quel que soit le panneau actif.Se déplacer au mois précédent du calendrier, quel que soit le panneau actif.Se déplacer à la semaine précédente du calendrier, quel que soit le panneau actif.Se déplacer à l'année précédent du calendrier, quel que soit le panneau actif.Vers la gauche.Vers la droite.Vers le haut.Aucun journal à afficher !Fichier de note introuvable NotifierNovembreVoir Suiv.OctobreAncien fichier de sauvegarde trouvé :Ancien fichier temporaire trouvé :AutresCollerColler un élément à la position actuelle.TubePasser un élément à une commande externe :Passer l'élément sélectionné à un programme externe.Merci de reporter le bogue suivant :Les formats autorisés sont [%s] ou '0' pour répéter indéfinimentLes formats possibles sont [%s] ou '0' pour une répétition non bornée.Format de fichier de configuration pre-3.0.0 détecté, veuillez mettre à jour en lançant `calcurse-upgrade`.Format de fichier de configuration pre-3.0.0 détécté...Appuyer sur [ENTRÉE] pour continuerAppuyer sur [ENTRÉE] pour continuer.Appuyer sur [ENTRÉE] pour continuerPresser une touche pour continuer...Pressez la touche que vous voulez assigner :Afficher les informations générales à propos des auteurs de calcurse, de la licence, etc.Prio.+Prio.-Problème d'accès aux fichiers de données…Voir Prec.QuitterAugmenter la priorité d'une tâche dans le panneau des tâches.RafraîchirRafraîchir l'écran de calcurse.Suppression de la sauvegarde temporaire...RépéterRépéter un élémentRépétitionDroiteSamEnregistrerEnregistre les données de calcurse.Enregistrement…Faire défiler l'écran vers le bas (p. ex. lors de l'affichage du texte dans une fenêtre indépendante).Faire défiler l'écran vers le haut (p. ex. lors de l'affichage du texte dans une fenêtre indépendante).SélectionnerSélectionner le panneau suivant dans l'écran général de calcurse.Sélectionner le jour à afficher.Sélectionner le premier jour de la semaine en cours lors de l'affichage du calendrier.Sélectionner l'élément en surbrillance.Sélectionner le dernier jour de la semaine en cours lors de l'affichage du calendrier.SeptembreAfficher l'action suivante possible dans la barre d'état.Barre latéraleCertaines actions n'ont pas de raccourcis clavier associés !Désolé, les couleurs ne sont pas prises en charge par votre terminal (Appuyer sur [ENTRÉE] pour continuer)Désolé, la date saisie est antérieure à la date de début de l'élément !Heure de débutDimDimancheA FAIRE:Les fichiers de données ont été correctement enregistréesLes données ont été correctement exportéesLa date saisie n'est pas valide.Le fichier ne peut être ouvert, veuillez saisir un autre nom de fichier.La fréquence que vous avez saisie n'est pas valide.Le fichier ical semble mal formé. La fin de l'élément n'a pas été trouvée.Cet élément est déjà répétitif.Cette touche est déjà utilisée pour %s, veuillez en choisir une autre.Cette touche n'est pas encore reconnue par calcurse, veuillez en choisir une autre.JeuAujourd.Trop d'erreurs durant la lecture du fichier de raccourcis, annulation...Taper 'calcurse -h' pour plus d'informations. MarOption inconnue !HautMise à jour des instructions de configuration...Utilisation : calcurse-upgrade [-h|-v|--config ]VoirConsulter la note jointe à l'élément sélectionné.VoirNoteAttention : impossible de créer un journal temporaire, abandon en cours...Attention : impossible d'effacer le journal temporaire %s, Abandon...Attention : impossible d'ouvrir %s, abandon...Attention : impossible d'ouvrir le journal temporaire, abandon...Attention : l'en-tête ical est mal formé ou le numéro de version est mauvais. Abandon…MerBienvenue dans Calcurse. Les fichiers manquants ont été créés.Pendant l'ajout de la touche par défaut pour "%s", "%s" était déjà assignée ![tc][dwmy][en][ip][tn][on]rendez-vous sans date de début.rendez-vous introuvableréveillé à %s Déb Sem.le bloc semble déjà libéré à l'adresse %scalcurse n'est pas en cours d'exécution Calcurse est lancé (PID %d) calcurse s'exécute est arrière-plan (PID %d) thème de couleurtâches terminées : variable de configuration inconnue : "%s"fin de bloc corrompu à l'adresse %s, (fin = %u, devrait être %d)début de bloc corrompu à l'adresse %simpossible d'allouer de la mémoire pour stocker les informations du blocimpossible de calculer la durée (pas de date de fin).impossible de trouver la description entière de l'élément.impossible de récupérer l'heure de fin de l'événement.impossible de récupérer l'heure de début de l'événement.impossible de récupérer le résumé de l'événement.erreur de date sur ce rendez-vousdate erronée dans l'événementerreur dans la date de l'événement dbg_free : pointeur nulle à l'adresse %sdd/mm/yyyydescription mal formée.faitFin Sem.erreur dans mktimeerreur de chargement du rendez-vous suivant erreur durant le lancement de la commandeerreur pendant le lancement de la commande : fork impossibleerreur durant l'envoi de la notification la date de l'événement n'est pas définie.événement introuvableimpossible d'ouvrir le fichier des rendez-vousimpossible d'ouvrir le fichier de configurationimpossible d'ouvrir le fichier des raccourcis clavierimpossible d'ouvrir le fichier des tâcheserreur fatale dans mktimeoptions généralestype de répétition incohérentinstruction de configuration invalide : "%s"l'élément n'a pu être identifié.durée de l'élément mal formée.l'élément a une durée négative.La priorité de l'élément est illégale (doit être compris entre 1 et 9).Configuration des raccourcislancement de la notification à %s pour : "%s" Configuration de l'affichagemm/dd/yyyyprochain rendez-vous : nonaucun événement ni rendez-vous trouvéaucune note jointerendez-vous inconnutâche inconnueoptions de notificationPointeur nuloption non définiedépassement de mémoiredébordement à l'adresse %sdates d'exception de répétition mal formées.la fréquence de répétition introuvable.la fréquence de répétition non reconnue.règle de répétition mal formée.endormi à %s pour %d seconde endormi à %s pour %d secondes démarré à %s erreur de syntaxe dans la date de l'élémenterreur de syntaxe dans le nom de l'élémenterreur de syntaxe pour la répétition de l'élémenterreur de syntaxe pour l'heure ou la durée de l'élémenterreur de syntaxe sur la date de l'élémentle fichier temporaire "%s" n'a pas pu être créearrêté à %s avec le signal %d à faire : tâche introuvableinconnuecaractère inconnucouleur inconnuetype d'exportation inconnutype ical inconnutype d'importation inconnutype d'élément inconnupanneau inconnutype de répétition inconnuoption non reconnue :format de variable de configuration incorrect pour "%s"mode d'exportation incorrectformat incorrect du rendez-vous ou de l'événementtype d'élément incorrectxcalloc : dépassement de mémoirexcalloc : débordementxcalloc : taille nullexmalloc : dépassement de mémoirexmalloc : taille nullexrealloc : dépassement de mémoirexrealloc : débordementxrealloc : taille nulleouiyyyy-mm-ddyyyy/mm/dd| rapport de consommation mémoire de calcurse | calcurse-4.0.0/po/de.po0000644000175000017500000012623712472326722011625 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR calcurse Development Team # This file is distributed under the same license as the PACKAGE package. # # Translators: # delix, 2012 # Tim, 2013 msgid "" msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: bugs@calcurse.org\n" "POT-Creation-Date: 2015-02-22 10:37+0100\n" "PO-Revision-Date: 2014-08-03 21:51+0000\n" "Last-Translator: Lukas Fleischer \n" "Language-Team: German (http://www.transifex.com/projects/p/calcurse/language/" "de/)\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "null pointer" msgstr "Null-Zeiger" msgid "date error in appointment" msgstr "Datumsfehler im Termin" msgid "no such appointment" msgstr "Termin nicht gefunden" msgid "" "Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" " [-c] [-D] [-S] [--status]\n" " [--read-only]\n" msgstr "" "Verwendung: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" " [-c] [-D] [-S] [--status]\n" " [--read-only]\n" msgid "Try 'calcurse -h' for more information.\n" msgstr "Geben Sie 'calcurse -h' ein, für weitere Informationen.\n" #, fuzzy msgid "" "\n" "Copyright (c) 2004-2015 calcurse Development Team.\n" "This is free software; see the source for copying conditions.\n" msgstr "" "\n" "Copyright (c) 2004-2013 calcurse Development Team.\n" "Dies ist freie Software; vgl. den Quellcode zu den Kopierbedingungen.\n" #, c-format msgid "Calcurse %s - text-based organizer\n" msgstr "Calcurse %s - textbasierender Terminkalender\n" msgid "" "\n" "For more information, type '?' from within Calcurse, or read the manpage.\n" msgstr "" "\n" "Für nähere Informationen bitte '?' drücken oder die manpage lesen!\n" msgid "Mail feature requests and suggestions to .\n" msgstr "Bitte melden Sie Vorschläge an .\n" msgid "Mail bug reports to .\n" msgstr "Bitte melden Sie Programmfehler an .\n" msgid "" "\n" "Miscellaneous:\n" " -h, --help\n" "\tprint this help and exit.\n" "\n" " -v, --version\n" "\tprint calcurse version and exit.\n" "\n" " --status\n" "\tdisplay the status of running instances of calcurse.\n" "\n" " --read-only\n" "\tDon't save configuration nor appointments/todos. Use with care.\n" "\n" "Files:\n" " -c , --calendar \n" "\tspecify the calendar to use (has precedence over '-D').\n" "\n" " -D , --directory \n" "\tspecify the data directory to use.\n" "\tIf not specified, the default directory is ~/.calcurse\n" "\n" "Non-interactive:\n" " -a, --appointment\n" " \tprint events and appointments for current day and exit.\n" "\n" " -d , --day \n" "\tprint events and appointments for or upcoming days and\n" "\texit. To specify both a starting date and a range, use the\n" "\t'--startday' and the '--range' option.\n" "\n" " -g, --gc\n" "\trun the garbage collector for note files and exit. \n" "\n" " -i , --import \n" "\timport the icalendar data contained in . \n" "\n" " -n, --next\n" "\tprint next appointment within upcoming 24 hours and exit. Also given\n" "\tis the remaining time before this next appointment.\n" "\n" " -l , --limit \n" "\tonly print information regarding the next items. \n" "\n" " -r[num], --range[=num]\n" "\tprint events and appointments for the [num] number of days\n" "\tand exit. If no [num] is given, a range of 1 day is considered.\n" "\n" " -s[date], --startday[=date]\n" "\tprint events and appointments from [date] and exit.\n" "\tIf no [date] is given, the current day is considered.\n" "\n" " -S, --search=\n" "\tsearch for the given regular expression within events, appointments,\n" "\tand todos description.\n" "\n" " -t[num], --todo[=num]\n" "\tprint todo list and exit. If the optional number [num] is given,\n" "\tthen only todos having a priority equal to [num] will be returned.\n" "\tThe priority number must be between 1 (highest) and 9 (lowest).\n" "\tIt is also possible to specify '0' for the priority, in which case\n" "\tonly completed tasks will be shown.\n" "\n" " -x[format], --export[=format]\n" "\texport user data to the specified format. Events, appointments and\n" "\ttodos are converted and echoed to stdout.\n" "\tTwo possible formats are available: 'ical' and 'pcal'.\n" "\tIf the optional argument format is not given, ical format is\n" "\tselected by default.\n" "\tnote: redirect standard output to export data to a file,\n" "\tby issuing a command such as: calcurse --export > calcurse.dat\n" msgstr "" #, c-format msgid "" "Error: both calcurse (pid: %d) and its daemon (pid: %d)\n" "seem to be running at the same time!\n" "Please check manually and restart calcurse.\n" msgstr "" "Fehler: calcurse (PID %d) und der Dienst (PID %d)\n" "scheinen zur gleichen Zeit zu laufen!\n" "Bitte überprüfen Sie das und starten calcurse neu.\n" #, c-format msgid "calcurse is running (pid %d)\n" msgstr "calcurse ist gestartet (PID %d)\n" #, c-format msgid "calcurse is running in background (pid %d)\n" msgstr "calcurse ist im Hintergrund gestartet (PID %d)\n" msgid "calcurse is not running\n" msgstr "calcurse ist nicht gestartet\n" msgid "completed tasks:\n" msgstr "Beendete Aufgaben:\n" msgid "to do:\n" msgstr "Aufgaben:\n" msgid "next appointment:\n" msgstr "Nächster Termin:\n" #, fuzzy, c-format msgid "invalid date: %s" msgstr "Ungültige Verzögerung" #, c-format msgid "invalid range: %s" msgstr "" #, c-format msgid "invalid priority: %s" msgstr "" #, c-format msgid "invalid export format: %s" msgstr "" msgid "invalid filter mask" msgstr "" #, fuzzy msgid "cannot handle more than one regular expression" msgstr "Mehr als ein Regulärer Ausdruck kann nicht verarbeitet werden." #, fuzzy, c-format msgid "could not compile regular expression: %s" msgstr "Kann den Regulären Ausdruck nicht verarbeiten." #, c-format msgid "invalid date range: %s" msgstr "" msgid "invalid argument combination" msgstr "" msgid "cannot specify a range and an end date" msgstr "" msgid "Export to (i)cal or (p)cal format?" msgstr "In (i)cal- oder (p)cal-Format exportieren?" msgid "[ip]" msgstr "[ip]" msgid "Do you really want to quit?" msgstr "Möchten Sie das Programm wirklich beenden?" msgid "Command:" msgstr "Befehl:" #, c-format msgid "Help topic does not exist: %s" msgstr "Hilfethema existiert nicht: %s" #, c-format msgid "No such command: %s" msgstr "Unbekannter Befehl: %s" msgid "unknown color" msgstr "Unbekannte Farbe" msgid "failed to open configuration file" msgstr "Konfigurationsdatei konnte nicht geöffnet werden." #, c-format msgid "invalid configuration directive: \"%s\"" msgstr "Ungültige Konfigurationsanweisung: \"%s\"" msgid "" "Pre-3.0.0 configuration file format detected, please upgrade running " "`calcurse-upgrade`." msgstr "" "Prä-3.0.0-Konfigurationsdateiformat entdeckt, bitte aktualisieren Sie " "calcurse mit `calcurse-upgrade`." #, c-format msgid "configuration variable unknown: \"%s\"" msgstr "Konfigurationsvariable unbekannt: \"%s\"" #, c-format msgid "wrong configuration variable format for \"%s\"" msgstr "falsches Konfigurationsvariablenformat für \"%s\"" msgid "layout configuration" msgstr "Layout Einstellungen" msgid "Foreground" msgstr "Vordergrund" msgid "Background" msgstr "Hintergrund" msgid "(terminal's default)" msgstr "(Standartwert des Terminals)" msgid "color theme" msgstr "Farbtabelle" msgid "(if set to YES, compact panels are used)" msgstr "" msgid "Calendar" msgstr "Kalender" msgid "Appointments" msgstr "Termine" msgid "TODO" msgstr "Zu erledigen" msgid "(specifies the panel that is selected by default)" msgstr "" msgid "(if set to YES, automatic save is done when quitting)" msgstr "(Ist JA gewählt, wird beim Beenden automatisch gespeichert)" msgid "(run the garbage collector when quitting)" msgstr "(automatische Speicherbereinigung beim Beenden ausführen)" msgid "(if not null, automatically save data every 'periodic_save' minutes)" msgstr "(Wenn nicht '0' eingegeben ist wird alle N Minuten gespeichert)" msgid "(if set to YES, confirmation is required before quitting)" msgstr "(Ist JA gewählt, ist eine Bestätigung erforderlich zum Beenden)" msgid "(if set to YES, confirmation is required before deleting an event)" msgstr "" "(Ist JA gewählt, ist eine Bestätigung erforderlich, um ein Ereignis zu " "löschen)" msgid "(if set to YES, messages about loaded and saved data will be displayed)" msgstr "" "(Ist JA gewählt, werden Nachrichten über geladene und gespeicherte Daten " "angezeigt)" msgid "(if set to YES, progress bar will be displayed when saving data)" msgstr "(Ist JA gewählt, werden Fortschrittsbalken beim Speichern angezeigt)" msgid "Monday" msgstr "Montag" msgid "Sunday" msgstr "Sonntag" msgid "(specifies the first day of week in the calendar view)" msgstr "(lege den ersten Tag der Woche in der Kalenderansicht fest)" msgid "(Format of the date to be displayed in non-interactive mode)" msgstr "(Datumsformatierung innerhalb der nicht-interaktiven Ansicht)" msgid "(Format to be used when entering a date: " msgstr "(Format für die Eingabe eines Datums)" msgid "Enter an option number to change its value" msgstr "Nummer eingeben um den Wert zu ändern [Q um zu beenden]" msgid "(Press '^P' or '^N' to move up or down, 'Q' to quit)" msgstr "(^P oder ^N drücken zum hoch/runter bewegen, Q zum Beenden)" msgid "Enter the date format (see 'man 3 strftime' for possible formats) " msgstr "Geben Sie das Datumsformat an (vgl. 'man 3 strftime')" msgid "Enter the date format: " msgstr "Datumsformat eingeben:" msgid "Enter the delay, in minutes, between automatic saves (0 to disable) " msgstr "" "Zeitraum für die automatische Speicherung in Minuten eingeben\n" "(0 zum Ausschalten)" msgid "general options" msgstr "Allgemeine Einstellungen" msgid "Undefined option!" msgstr "Unbestimmte Einstellung!" msgid "undefined" msgstr "unbestimmt" msgid "keys configuration" msgstr "Tasteneinstellung" msgid "Press the key you want to assign to:" msgstr "Taste drücken, die zugewiesen werden soll:" msgid "This key is not yet recognized by calcurse, please choose another one." msgstr "Diese Taste kennt calcurse nicht, bitte andere Taste wählen." #, c-format msgid "This key is already in use for %s, please choose another one." msgstr "Diese Taste ist schon mit %s belegt, bitte andere Taste wählen." msgid "Some actions do not have any associated key bindings!" msgstr "Einige Aktionen haben keine Tastenzuordnung!" msgid "" "Sorry, colors are not supported by your terminal\n" "(Press [ENTER] to continue)" msgstr "" "Farben werden von diesem Terminal nicht unterstützt.\n" "([EINGABE]-Taste um fortzufahren)" msgid "unknown item type" msgstr "Unbekannte Position" msgid "Event:" msgstr "Ereignis:" msgid "Appointment:" msgstr "Termin:" #, c-format msgid "Could not stop daemon properly: %s\n" msgstr "Kann den Dienst nicht beenden: %s\n" #, c-format msgid "terminated at %s with signal %d\n" msgstr "Beendet (%s) mit Signal %d\n" #, c-format msgid "Could not remove daemon lock file: %s\n" msgstr "Kann Sperrdatei des Dienst nicht löschen: %s\n" #, c-format msgid "Could not fork: %s\n" msgstr "Kann Befehl nicht ausführen: %s\n" #, c-format msgid "Could not detach from the controlling terminal: %s\n" msgstr "Kann das Programm nicht vom Terminal lösen: %s\n" #, c-format msgid "Could not change working directory: %s\n" msgstr "Kann das Arbeitsverzeichnis nicht wechseln: %s\n" msgid "Cannot daemonize, aborting\n" msgstr "Kann nicht als Dienst laufen. Abbruch\n" msgid "Could not set lock file\n" msgstr "Kann keine Sperrdatei setzen\n" #, c-format msgid "Could not access \"%s\": %s\n" msgstr "Kein Zugriff auf \"%s\": %s\n" #, c-format msgid "started at %s\n" msgstr "Gestartet als %s\n" msgid "error loading next appointment\n" msgstr "Fehler beim Laden des nächsten Termins\n" #, c-format msgid "launching notification at %s for: \"%s\"\n" msgstr "Startbenachrichtigung auf %s für: \"%s\"\n" msgid "error while sending notification\n" msgstr "Fehler beim senden der Benachrichtigung\n" #, c-format msgid "sleeping at %s for %d second\n" msgid_plural "sleeping at %s for %d seconds\n" msgstr[0] "schlafe bei %s für %d Sekunde\n" msgstr[1] "schlafe bei %s für %d Sekunden\n" #, c-format msgid "awakened at %s\n" msgstr "Aufgeweckt als %s\n" #, c-format msgid "Could not stop calcurse daemon: %s\n" msgstr "Kann den calcurse dienst nicht beenden: %s\n" msgid "date error in event" msgstr "Datumsfehler im Ereignis" msgid "date error in the event\n" msgstr "Fehlerhafte Zeit für das Ereignis\n" msgid "Internal error: line too long" msgstr "INTERNER FEHLER Die Zeile ist zu lang" msgid "out of memory" msgstr "Hauptspeicher reicht nicht aus" msgid "unknown ical type" msgstr "Unbekannter ICal Typ" msgid "recurrence frequence not found." msgstr "Wiederholungstyp nicht gefunden." msgid "recurrence frequence not recognized." msgstr "Wiederholungstyp nicht bekannt." msgid "recurrence rule malformed." msgstr "Wiederholungstyp falsch." msgid "recurrence exception dates malformed." msgstr "Ausnahmen des Wiederholungstyp falsch." msgid "could not get entire item description." msgstr "Kann nicht die ganze Beschreibung lesen." msgid "description malformed." msgstr "Beschreibung Fehlerhaft." msgid "appointment has no start time." msgstr "Termin hat keine Startzeit." msgid "could not compute duration (no end time)." msgstr "Kann Dauer nicht berechnen (keine Endzeit)." msgid "item has a negative duration." msgstr "Eintrag hat eine negative Dauer." msgid "event date is not defined." msgstr "Ereignisdatum ist nicht eingegeben." msgid "item could not be identified." msgstr "Element kann nicht erkannt werden." msgid "could not retrieve item summary." msgstr "Kann die Zusammenfassung des Eintrags nicht lesen." msgid "could not retrieve event start time." msgstr "Kann die Startzeit des Ereignis nicht lesen." msgid "could not retrieve event end time." msgstr "Kann die Endzeit des Ereignis nicht lesen." msgid "item duration malformed." msgstr "Dauer des Eintrags fehlerhaft." msgid "The ical file seems to be malformed. The end of item was not found." msgstr "Die ICal Datei ist fehlerhaft. Keine Enddatum des Eintrags gefunden." msgid "item priority is not acceptable (must be between 1 and 9)." msgstr "Priorität des Eintrags muss zwischen 1 und 9 liegen." msgid "Warning: ical header malformed or wrong version number. Aborting..." msgstr "WARNUNG ICal Kopf fehlerhaft oder falsche Versionsnummer. Abbruch..." msgid "Saving..." msgstr "Speichere..." msgid "Loading..." msgstr "Lade..." msgid "Exporting..." msgstr "Exportiere..." msgid "Internal error while displaying progress bar" msgstr "Interner Fehler beim Darstellen des Fortschrittsbalkens" msgid "Choose the file used to export calcurse data:" msgstr "Wählen Sie die Datei in die exportiert werden soll:" msgid "The file cannot be accessed, please enter another file name." msgstr "" "Auf die Datei kann nicht zugegriffen werden, bitte einen anderen Dateinamen " "eingeben." msgid "Press [ENTER] to continue." msgstr "[EINGABE] um fortzufahren." #, c-format msgid "Failed to open \"%s\", - %s\n" msgstr "Fehler beim öffnen \"%s\", - %s\n" msgid "Failed to build message\n" msgstr "Fehler beim Erstellen der Nachricht\n" #, c-format msgid "Failed to print message \"%s\"\n" msgstr "Fehler beim Drucken der Nachricht \"%s\"\n" #, c-format msgid "Failed to close \"%s\" - %s\n" msgstr "Fehler beim Schließen \"%s\" - %s\n" #, fuzzy, c-format msgid "%s does not exist" msgstr "Hilfethema existiert nicht: %s" msgid "Problems accessing data file ..." msgstr "Probleme beim Zugriff auf Benutzerdaten ..." msgid "The data files were successfully saved" msgstr "Die Benutzerdaten wurden erfolgreich gespeichert" msgid "Press [ENTER] to continue" msgstr "[EINGABE]-Taste um fortzufahren" msgid "failed to open appointment file" msgstr "konnte Termin-Datei nicht öffnen" msgid "syntax error in the item date" msgstr "Eingabefehler im Datumseintrag" msgid "no event nor appointment found" msgstr "Kein Ereignis oder Termin gefunden" msgid "syntax error in item time or duration" msgstr "Syntaxfehler in Item-Zeit oder -Dauer" msgid "syntax error in item identifier" msgstr "Syntaxfehler im Item-Bezeichner" msgid "wrong format in the appointment or event" msgstr "Falsches Format für den Termin oder das Ereignis" msgid "syntax error in item repetition" msgstr "Syntaxfehler in Item-Wiederholung" msgid "failed to open todo file" msgstr "konnte Aufgaben-Datei nicht öffnen" msgid "The data files were reloaded successfully" msgstr "" msgid "There are unsaved modifications:" msgstr "" msgid "(d)iscard" msgstr "" msgid "(m)erge" msgstr "" msgid "(k)eep and cancel" msgstr "" msgid "[dmk]" msgstr "" msgid "failed to open key file" msgstr "Konnte Tasenkonfigurationsdatei nicht öffnen" msgid "" "\n" "Too many errors while reading configuration file!\n" "Please backup your keys file, remove it from directory, and launch calcurse " "again.\n" msgstr "" "\n" "Zu viele Fehler beim Lesen der Konfigurationsdatei!\n" "Bitte die Einstellungsdatei der Tastaturkürzel sichern, diese aus dem\n" "Verzeichnis löschen und calcurse neu starten.\n" msgid "Could not read key label" msgstr "Kann die Tastenbezeichnung nicht lesen" msgid "Key label not recognized" msgstr "Tastenbezeichnung nicht bekannt" #, c-format msgid "Error reading key: \"%s\"" msgstr "Fehler beim Lesen der Taste \"%s\"" #, c-format msgid "\"%s\" assigned multiple times!" msgstr "\"%s\" ist mehrfach zugeordnet" msgid "There were some errors when loading keys file, see log file?" msgstr "" msgid "Too many errors while reading keys file, aborting..." msgstr "Zu viele Fehler beim Lesen der 'keys'-Datei, Abbruch..." #, c-format msgid "FATAL ERROR: could not create %s: %s\n" msgstr "SCHWERER FEHLER Konnte %s nicht erstellen: %s\n" msgid "Welcome to Calcurse. Missing data files were created." msgstr "Willkommen zu calcurse. Fehlende Dateien werden erzeugt." msgid "Data files found. Data will be loaded now." msgstr "Benutzerdaten gefunden. Daten werden geladen." msgid "The data were successfully exported" msgstr "Die Daten wurden erfolgreich exportiert" msgid "unknown export type" msgstr "Unbekanntes Exportformat" msgid "wrong export mode" msgstr "Falsches Exportformat" msgid "Enter the file name to import data from:" msgstr "Dateiname zum Importieren eingeben:" #, c-format msgid "Import process report: %04d lines read" msgstr "" msgid "unknown import type" msgstr "Unbekanntes Importformat" msgid "FATAL ERROR: the input file cannot be accessed, Aborting..." msgstr "SCHWERER FEHLER Eingabedatei kann nicht gelesen werden. Abbruch..." msgid "FATAL ERROR: wrong import mode" msgstr "SCHWERER FEHLER Falsches Exportformat" #, c-format msgid "%d app" msgid_plural "%d apps" msgstr[0] "%d Termin" msgstr[1] "%d Termine" #, c-format msgid "%d event" msgid_plural "%d events" msgstr[0] "%d Ereignis" msgstr[1] "%d Ereignisse" #, c-format msgid "%d todo" msgid_plural "%d todos" msgstr[0] "%d Aufgabe" msgstr[1] "%d Aufgaben" #, c-format msgid "%d skipped" msgstr "%d übersprungen" msgid "Some items could not be imported, see log file?" msgstr "" "Einige Einträge konnten nicht importiert werden; Logdatei jetzt ansehen?" msgid "Warning: could not open temporary log file, Aborting..." msgstr "WARNUNG Kann temporäre Logdatei nicht öffnen. Abbruch..." msgid "Warning: could not create temporary log file, Aborting..." msgstr "WARNUNG Kann keine temporäre Logdatei anlegen. Abbruch..." msgid "No log file to display!" msgstr "Keine Logdatei zum ansehen vorhanden!" #, c-format msgid "Warning: could not erase temporary log file %s, Aborting..." msgstr "WARNUNG Kann temporäre Logdatei %s nicht löschen. Abbruch..." msgid "Invalid delay" msgstr "Ungültige Verzögerung" #, c-format msgid "" "\n" "WARNING: it seems that another calcurse instance is already running.\n" "If this is not the case, please remove the following lock file: \n" "\"%s\"\n" "and restart calcurse.\n" msgstr "" "\n" "WARNUNG Scheinbar läuft eine weitere Instanz von calcurse schon.\n" "Wenn das nicht der Fall ist, bitte die Sperrdatei löschen:\n" "\"%s\"\n" "und calcurse neu starten.\n" msgid "Cancel" msgstr "" msgid "Select" msgstr "Auswahl" msgid "Credits" msgstr "" msgid "Help" msgstr "Hilfe" msgid "Quit" msgstr "Beenden" msgid "Save" msgstr "Speichern" msgid "Reload" msgstr "" msgid "Copy" msgstr "Kopieren" msgid "Paste" msgstr "Einfügen" msgid "Chg Win" msgstr "Wechseln" msgid "Import" msgstr "Importieren" msgid "Export" msgstr "Exportieren" msgid "Go to" msgstr "Gehe zu" msgid "OtherCmd" msgstr "Zus. Befehle" msgid "Config" msgstr "Einstellung" msgid "Redraw" msgstr "Neu aufbauen" msgid "Add Appt" msgstr "Neuer Termin" msgid "Add Todo" msgstr "Neue Aufgabe" msgid "-1 Day" msgstr "-1 Tag" msgid "+1 Day" msgstr "+1 Tag" msgid "-1 Week" msgstr "-1 Woche" msgid "+1 Week" msgstr "+1 Woche" msgid "-1 Month" msgstr "-1 Monat" msgid "+1 Month" msgstr "+1 Monat" msgid "-1 Year" msgstr "-1 Jahr" msgid "+1 Year" msgstr "+1 Jahr" msgid "Nxt View" msgstr "Weiter" msgid "Prv View" msgstr "Zurück" msgid "Today" msgstr "Heute" msgid "Command" msgstr "Befehl" msgid "Right" msgstr "Rechts" msgid "Left" msgstr "Links" msgid "Down" msgstr "Runter" msgid "Up" msgstr "Hoch" msgid "beg Week" msgstr "Wochenanfang" msgid "end Week" msgstr "Wochenende" msgid "Add Item" msgstr "Neueintrag" msgid "Del Item" msgstr "Löschen" msgid "Edit Itm" msgstr "Eintrag bearb." msgid "View" msgstr "Ansicht" msgid "Pipe" msgstr "Weiterleiten" msgid "Flag Itm" msgstr "Eigenschaft" msgid "Repeat" msgstr "Wiederholen" msgid "EditNote" msgstr "Notiz bearb." msgid "ViewNote" msgstr "Notiz anz." msgid "Prio.+" msgstr "Prio.+" msgid "Prio.-" msgstr "Prio.-" msgid "" "#\n" "# Calcurse keys configuration file\n" "#\n" "# This file sets the keybindings used by Calcurse.\n" "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n" "# To assign a keybinding to an action, this file must contain a line\n" "# with the following syntax:\n" "#\n" "# ACTION KEY1 KEY2 ... KEYn\n" "#\n" "# Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn\n" "# will be pressed.\n" "#\n" "# To define bindings which use the CONTROL key, prefix the key with 'C-'.\n" "# The escape, space bar and horizontal Tab key can be specified using\n" "# the 'ESC', 'SPC' and 'TAB' keyword, respectively.\n" "# Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords.\n" "# Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END'\n" "# keywords.\n" "#\n" "# A description of what each ACTION keyword is used for is available\n" "# from calcurse online configuration menu.\n" msgstr "" "#\n" "# Calcurse-Tastenkonfiguration\n" "#\n" "# Diese Datei definiert die Tastenkürzel für Calcurse.\n" "# Mit \"#\" beginnende Zeilen sind Kommentare und werden ignoriert.\n" "# Um eine Taste einer Aktion zuzuweisen, muss folgende Syntax\n" "# verwendet werden:\n" "#\n" "# AKTION TASTE1 TASTE2 ... TASTEn\n" "#\n" "# Wobei AKTION ausgeführt wird, wenn TASTE1, TASTE2, ... oder TASTEn\n" "# gedrückt wird.\n" "#\n" "# Um die STRG-Taste zu verwenden, kann der Taste 'C-' vorangestellt werden.\n" "# Die Escape-, Leer- und Tab-Tasten können durch die Schlüsselwörter\n" "# 'ESC', 'SPC' und 'TAB' verwendet werden.\n" "# Pfeiltasten entsprechend mit UP, DWN, LFT, RGT.\n" "# 'KEY_HOME' und 'KEY_END' entsprechen den Pos1- und Ende-Tasten.\n" "#\n" "# Eine Beschreibung jedes AKTION-Schlüsselwortes findet man im\n" "# Online-Konfigurationsmenü von calcurse.\n" msgid "FATAL ERROR: could not create default keys file." msgstr "" "SCHWERER FEHLER: konnte Default-Tastaturkonfigurationsdatei nicht erzeugen." msgid "FATAL ERROR: key value out of bounds" msgstr "SCHWERER FEHLER: Tastenwert außerhalb des gültigen Bereiches" msgid "General" msgstr "Allgemein" msgid "Layout" msgstr "Layout" msgid "Sidebar" msgstr "Seitenleiste" msgid "Color" msgstr "Farbe" msgid "Notify" msgstr "Benachrichtigung" msgid "Keys" msgstr "Tasten" msgid "Unknown" msgstr "" msgid "Cancel the ongoing action." msgstr "Aktuelle Aktion abbrechen." msgid "Select the highlighted item." msgstr "Wähle das hervorgehobene Item." msgid "Print general information about calcurse's authors, license, etc." msgstr "" "Zeige generelle Informationen über die calcurse-Authoren, -Lizenz, etc." msgid "Display hints whenever some help screens are available." msgstr "Zeige Hinweise, wenn Hilfebilschirme verfügbar sind." msgid "Exit from the current menu, or quit calcurse." msgstr "Verlasse aktuelles Menü oder beende calcurse." msgid "Save calcurse data." msgstr "Speichere calcurse-Daten." msgid "Reload appointments and todo items." msgstr "" msgid "Copy the item that is currently selected." msgstr "Das aktuell ausgewählte Item kopieren." msgid "Paste an item at the current position." msgstr "Item an aktueller Position einfügen." msgid "Select next panel in calcurse main screen." msgstr "Wähle nächstes Fenster im calcurse-Hauptbildschirm." msgid "Import data from an external file." msgstr "Importiere Daten von einer externen Datei." msgid "Export data to a new file format." msgstr "Exportiere Daten in ein neues Dateiformat." msgid "Select the day to go to." msgstr "Wähle den Tag, zu dem gesprungen werden soll." msgid "Show next possible actions inside status bar." msgstr "Zeige nächste mögliche Aktionen in der Statusleiste." msgid "Enter the configuration menu." msgstr "Öffne das Konfigurationsmenü." msgid "Redraw calcurse's screen." msgstr "Zeichne den calcurse-Bildschirm neu." msgid "Add an appointment, whichever panel is currently selected." msgstr "Erstelle Termin, je nach aktuell ausgewähltem Fenster." msgid "Add a todo item, whichever panel is currently selected." msgstr "Erstelle Aufgabe, je nach aktuell ausgewähltem Fenster." msgid "" "Move to previous day in calendar, whichever panel is currently selected." msgstr "" "Gehe zum vorigen Tag im Kalender, je nach aktuell ausgewähltem Fenster." msgid "Move to next day in calendar, whichever panel is currently selected." msgstr "" "Gehe zum nächsten Tag im Kalender, je nach aktuell ausgewähltem Fenster." msgid "" "Move to previous week in calendar, whichever panel is currently selected" msgstr "" "Gehe zur vorigen Woche im Kalender, je nach aktuell ausgewähltem Fenster." msgid "Move to next week in calendar, whichever panel is currently selected." msgstr "" "Gehe zur nächsten Woche im Kalender, je nach aktuell ausgewähltem Fenster." msgid "" "Move to previous month in calendar, whichever panel is currently selected" msgstr "" "Gehe zum vorigen Monat im Kalender, je nach aktuell ausgewähltem Fenster." msgid "Move to next month in calendar, whichever panel is currently selected." msgstr "" "Gehe zum nächsten Monat im Kalender, je nach aktuell ausgewähltem Fenster." msgid "" "Move to previous year in calendar, whichever panel is currently selected" msgstr "" "Gehe zum vorigen Jahr im Kalender, je nach aktuell ausgewähltem Fenster." msgid "Move to next year in calendar, whichever panel is currently selected." msgstr "" "Gehe zum nächsten Jahr im Kalender, je nach aktuell ausgewähltem Fenster." msgid "Scroll window down (e.g. when displaying text inside a popup window)." msgstr "" "Scrolle Fenster nach unten (z.B. beim Anzeigen von Text in einem Fenster)." msgid "Scroll window up (e.g. when displaying text inside a popup window)." msgstr "" "Scrolle Fenster nach oben (z.B. beim Anzeigen von Text in einem Fenster)." msgid "Go to today, whichever panel is selected." msgstr "Gehe zum heutigen Tag, je nach ausgewähltem Fenster." msgid "Enter command mode." msgstr "" msgid "Move to the right." msgstr "Gehe nach rechts." msgid "Move to the left." msgstr "Gehe nach links." msgid "Move down." msgstr "Gehe nach unten." msgid "Move up." msgstr "Nach oben." msgid "" "Select the first day of the current week when inside the calendar panel." msgstr "Wähle den ersten Tag der aktuellen Woche im Kalenderfenster." msgid "Select the last day of the current week when inside the calendar panel." msgstr "Wähle den letzten Tag der aktuellen Woche im Kalenderfenster." msgid "Add an item to the currently selected panel." msgstr "Füge ein Item zum aktuell ausgewählten Fenster hinzu." msgid "Delete the currently selected item." msgstr "Entferne das aktuell ausgewählte Item." msgid "Edit the currently seleted item." msgstr "Bearbeite das aktuell ausgewählte Item." msgid "Display the currently selected item inside a popup window." msgstr "Zeige das aktuell ausgewählte Item in einem Fenster." msgid "Flag the currently selected item as important." msgstr "Das aktuell ausgewählte Item als wichtig markieren." msgid "Repeat an item" msgstr "Ein Item wiederholen" msgid "Pipe the currently selected item to an external program." msgstr "Das aktuell ausgewählte Item in ein externes Programm weiterleiten." msgid "Attach (or edit if one exists) a note to the currently selected item" msgstr "" "Notiz an aktuell ausgewähltes Item anhängen (oder existierende Notiz " "bearbeiten)" msgid "View the note attached to the currently selected item." msgstr "Notiz zum aktuell ausgewählten Item ansehen." msgid "Raise a task priority inside the todo panel." msgstr "Erhöhe Aufgaben-Priorität im Aufgabenfenster." msgid "Lower a task priority inside the todo panel." msgstr "Verringere Aufgaben-Priorität im Aufgabenfenster." msgid "FATAL ERROR: null file pointer." msgstr "SCHWERER FEHLER: Null-Datei-Zeiger." #, c-format msgid "When adding default key for \"%s\", \"%s\" was already assigned!" msgstr "" "Beim Hinzufügen einer Default-Taste für \"%s\" war \"%s\" bereits zugewiesen!" msgid "xmalloc: zero size" msgstr "xmalloc: Länge 0" msgid "xmalloc: out of memory" msgstr "xmalloc: Speicher ist voll" msgid "xcalloc: zero size" msgstr "xcalloc: Länge 0" msgid "xcalloc: overflow" msgstr "xcalloc: Überlauf" msgid "xcalloc: out of memory" msgstr "xcalloc: Speicher ist voll" msgid "xrealloc: zero size" msgstr "xrealloc: Länge 0" msgid "xrealloc: overflow" msgstr "xrealloc: Überlauf" msgid "xrealloc: out of memory" msgstr "xrealloc: Speicher ist voll" msgid "could not allocate memory to store block info" msgstr "konnte kein Speicher für die Block-Info alloziieren" msgid "Block not found" msgstr "Block nicht gefunden" #, c-format msgid "overflow at %s" msgstr "Überlauf bei %s" #, c-format msgid "dbg_free: null pointer at %s" msgstr "dbg_free: Null-Zeiger bei %s" #, c-format msgid "block seems already freed at %s" msgstr "Block scheint schon bei %s freigegeben" #, c-format msgid "corrupt block header at %s" msgstr "Korrupter Block-Header bei %s" #, c-format msgid "corrupt block end at %s, (end = %u, should be %d)" msgstr "Korruptes Block-Ende bei %s (Ende = %u, sollte %d sein)" msgid "---==== MEMORY BLOCK ====----------------\n" msgstr "---==== SPEICHERBLOCK ===----------------\n" #, c-format msgid " id: %u\n" msgstr " id: %u\n" #, c-format msgid " size: %u\n" msgstr " Größe: %u\n" #, c-format msgid " allocated in: %s\n" msgstr "alloziiert bei: %s\n" msgid "-----------------------------------------\n" msgstr "-----------------------------------------\n" msgid "+------------------------------+\n" msgstr "+------------------------------+\n" msgid "| calcurse memory usage report |\n" msgstr "| calcurse memory usage report |\n" #, c-format msgid " number of calls: %u\n" msgstr " Anzahl Aufrufe: %u\n" #, c-format msgid " allocated blocks: %u\n" msgstr "alloziierte Blöcke: %u\n" #, c-format msgid " unfreed blocks: %u\n" msgstr " belegte Blöcke: %u\n" #, c-format msgid "Warning: could not open %s, Aborting..." msgstr "WARNUNG: Kann %s nicht öffnen. Abbruch..." msgid "error while launching command: could not fork" msgstr "Fehler beim Ausführen einer Befehlszeile: Kann nicht Ausführen" msgid "error while launching command" msgstr "Fehler beim Ausführen einer Befehlszeile" msgid "(if set to YES, notify-bar will be displayed)" msgstr "(Ist JA gewählt, wird die Benachrichtigungszeile angezeigt)" msgid "(Format of the date to be displayed inside notify-bar)" msgstr "(Datumsformat innerhalb der Benachrichtigungszeile)" msgid "(Format of the time to be displayed inside notify-bar)" msgstr "(Uhrzeitformatierung innerhalb der Benachrichtigungszeile)" msgid "" "(Warn user if an appointment is within next 'notify-bar_warning' seconds)" msgstr "(Nutzer auf einen Termin innerhalb der nächsten n Sekunden hinweisen)" msgid "(Command used to notify user of an upcoming appointment)" msgstr "(Befehl um Benutzer auf einen bevorstehenden Termin hinzuweisen)" msgid "(Notify all appointments instead of flagged ones only)" msgstr "(Benachrichtige alle Termine, anstelle nur markierte)" msgid "(Run in background to get notifications after exiting)" msgstr "" "(Im Hintergrund laufen, um Benachrichtigungen zu bekommen nach Beenden)" msgid "(Log activity when running in background)" msgstr "(Aufzeichnen von Aktivitäten, wenn im Hintergrund ausgeführt)" msgid "Enter the time format (see 'man 3 strftime' for possible formats) " msgstr "Zeitformat eingeben (vgl. 'man 3 strftime')" msgid "Enter the number of seconds (0 not to be warned before an appointment)" msgstr "Geben Sie die Zeit in Sekunden ein (0 um keine Hinweis zu erhalten)." msgid "Enter the notification command " msgstr "Befehl für die Benachrichtigung" msgid "notification options" msgstr "Einstellungen der Benachrichtigung" msgid "incoherent repetition type" msgstr "Unzusammenhängende Wiederholung" msgid "unknown repetition type" msgstr "Unbekannter Wiederholungstyp" msgid "unknown character" msgstr "Unbekanntes Zeichen" msgid "event not found" msgstr "Ereignis nicht gefunden" msgid "appointment not found" msgstr "Termin nicht gefunden" msgid "syntax error in item date" msgstr "Eingabefehler im Datum" msgid "date error in item exception" msgstr "" #, c-format msgid "Could not remove calcurse lock file: %s\n" msgstr "Kann die Sperrdatei nicht löschen: %s\n" #, c-format msgid "Error setting signal #%d : %s\n" msgstr "Fehler bei Signal: #%d : %s\n" msgid "no note attached" msgstr "Keine Notiz angehängt" msgid "no such todo" msgstr "Keine Aufgabe gefunden" msgid "todo not found" msgstr "Aufgabe nicht gefunden" msgid "ERROR setting first day of week" msgstr "FEHLER beim Einstellen des ersten Wochentags." #, fuzzy msgid "The day you entered is not valid" msgstr "Das eingegebene Wiederholung ist ungültig." #, c-format 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]):" msgstr "Startuhrzeit eingeben ([hh:mm] oder [hhmm]):" msgid "Press [Enter] to continue" msgstr "[EINGABE]-Taste um fortzufahren" msgid "You entered an invalid time, should be [hh:mm] or [hhmm]" msgstr "" "Sie haben eine ungültige Uhrzeit eingegeben, sollte im Format [hh:mm] oder " "[hhmm] sein" msgid "Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):" msgstr "" "Enduhrzeit ([hh:mm], [hhmm]) oder Termindauer ([+hh:mm], [+xxxdxxhxxm]) " "eingeben:" msgid "Invalid time: start time must be before end time!" msgstr "Ungültige Zeitangabe: Der Startzeitpunkt muss vor dem Ende liegen!" msgid "Enter the new item description:" msgstr "Geben Sie eine neue Beschreibung ein:" msgid "Enter the new repetition type:" msgstr "Neuen Wiederholungstyp eingeben:" msgid "(d)aily" msgstr "(t)äglich" msgid "(w)eekly" msgstr "(w)öchentlich" msgid "(m)onthly" msgstr "(m)onatlich" msgid "(y)early" msgstr "(j)ährlich" #, c-format msgid "(currently using %s)" msgstr "(verwende momentan %s)" msgid "[dwmy]" msgstr "[twmj]" msgid "The frequence you entered is not valid." msgstr "Das eingegebene Wiederholung ist ungültig." msgid "The entered date is not valid." msgstr "Das eingegebene Datum ist ungültig." #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition." msgstr "Mögliche Formate sind [%s] oder '0' für Endloswiederholung." msgid "Enter the new repetition frequence:" msgstr "Neue Wiederholung eingeben:" #, c-format msgid "Enter the new ending date: [%s] or '0'" msgstr "Neues Enddatum eingeben: [%s] oder '0'" msgid "Description" msgstr "Beschreibung" msgid "Repetition" msgstr "Wiederholung" msgid "Edit: " msgstr "Bearbeiten:" msgid "Start time" msgstr "Start-Uhrzeit" msgid "End time" msgstr "End-Uhrzeit" msgid "Move" msgstr "" msgid "Pipe item to external command:" msgstr "Leite an externen Befehl weiter:" msgid "Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:" msgstr "" "Startuhrzeit eingeben [(hh:mm] oder [hhmm]) oder freilassen für ein " "ganztägiges Ereignis:" msgid "Enter description:" msgstr "Beschreibung eingeben:" msgid "You entered an invalid start time, should be [hh:mm] or [hhmm]" msgstr "" "Sie haben eine ungültige Start-Uhrzeit eingegeben, sollte im Format [hh:mm] " "oder [hhmm] sein" msgid "" "Invalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], " "[+xxxdxxhxxm] or [+mm]" msgstr "" "Ungültige End-Uhrzeit/Dauer; sollte im Format [hh:mm], [hhmm], [+hh:mm], " "[+xxxdxxhxxm] oder [+mm] sein" msgid "Do you really want to delete this item?" msgstr "Möchten Sie diesen Eintrag wirklich löschen?" msgid "This item is recurrent. Delete (a)ll occurences or just this (o)ne?" msgstr "" msgid "[ao]" msgstr "[ae]" msgid "This item has a note attached to it. Delete (i)tem or just its (n)ote?" msgstr "" msgid "[in]" msgstr "[in]" msgid "Enter the repetition type:" msgstr "Wiederholungstyp eingeben:" msgid "Enter the repetition frequence:" msgstr "Geben Sie das Wiederholungsintervall an:" #, c-format msgid "Enter the ending date: [%s] or '0' for an endless repetition" msgstr "Ende der Wiederholung: [%s] oder '0' für unendlich." #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition" msgstr "Mögliche Eingaben sind [%s] oder '0' für unendlich." msgid "This item is already a repeated one." msgstr "Es handelt sich bereits um einen wiederkehrenden Eintrag." msgid "Sorry, the date you entered is older than the item start time." msgstr "Das eingegebene Datum liegt vor dem Anfangszeitpunkt." msgid "wrong item type" msgstr "Falscher Typ des Eintrags" msgid "Enter the new TODO item:" msgstr "Neue Aufgabe eingeben: " msgid "Enter the TODO priority [1 (highest) - 9 (lowest)]:" msgstr "Priorität der Aufgabe [1 (höchste) - 9 (niedrigste)] :" msgid "Do you really want to delete this task?" msgstr "Möchten Sie diese Aufgabe wirklich löschen?" msgid "This item has a note attached to it. Delete (t)odo or just its (n)ote?" msgstr "" msgid "[tn]" msgstr "[an]" msgid "Enter the new TODO description:" msgstr "Beschreibung der neuen Aufgabe:" msgid "TODO:" msgstr "Zu erledigen:" msgid "/!\\ INTERNAL ERROR /!\\" msgstr "INTERNER FEHLER" msgid "Please report the following bug:" msgstr "Bitte den Programmfehler melden:" msgid "[yn]" msgstr "[jn]" msgid "Press any key to continue..." msgstr "Eine beliebige Taste um fortzufahren..." msgid "failure in mktime" msgstr "Fehlfunktion in mktime" msgid "error in mktime" msgstr "Fehler in mktime" msgid "yes" msgstr "ja" msgid "no" msgstr "nein" msgid "option not defined" msgstr "Option nicht definiert" #, c-format msgid "temporary file \"%s\" could not be created" msgstr "temporäre Datei \"%s\" kann nicht erstellt werden" #, c-format msgid "Error when closing file at %s" msgstr "Fehler beim schließen der Datei %s" msgid "No note file found\n" msgstr "Notiz nicht gefunden\n" msgid "January" msgstr "Januar" msgid "February" msgstr "Februar" msgid "March" msgstr "März" msgid "April" msgstr "April" msgid "May" msgstr "Mai" msgid "June" msgstr "Juni" msgid "July" msgstr "Juli" msgid "August" msgstr "August" msgid "September" msgstr "September" msgid "October" msgstr "Oktober" msgid "November" msgstr "November" msgid "December" msgstr "Dezember" msgid "Sun" msgstr " So" msgid "Mon" msgstr " Mo" msgid "Tue" msgstr " Di" msgid "Wed" msgstr " Mi" msgid "Thu" msgstr " Do" msgid "Fri" msgstr " Fr" msgid "Sat" msgstr " Sa" msgid "mm/dd/yyyy" msgstr "mm/tt/jjjj" msgid "dd/mm/yyyy" msgstr "tt/mm/jjjj" msgid "yyyy/mm/dd" msgstr "jjjj/mm/tt" msgid "yyyy-mm-dd" msgstr "jjjj-mm-tt" msgid "unknown panel" msgstr "unbekannte Ansicht" msgid "Usage: calcurse-upgrade [-h|-v|--config ]" msgstr "Verwendung: calcurse-upgrade [-h|-v|--config ]" msgid "unrecognized option:" msgstr "unbekannte Option:" msgid "Configuration file not found:" msgstr "Konfigurationsdatei nicht gefunden:" msgid "Pre-3.0.0 configuration file format detected..." msgstr "Prä-3.0.0-Konfigurationsdateiformat entdeckt..." msgid "Create temporary backup of the configuration file..." msgstr "Erstelle temporäres Backup der Konfigurationsdatei..." msgid "Old backup file found:" msgstr "Alte Backup-Datei gefunden:" msgid "" "\n" "If a previous conversion did not complete, please try to restore your\n" "configuration from this backup and then remove the backup file." msgstr "" "\n" "Falls eine vorige Konvertierung fehlschlug, bitte versuchen Sie, die\n" "Konfiguration von diesem Backup wiederherzustellen und die Backup-\n" "Datei anschließend zu entfernen." msgid "done" msgstr "fertig" msgid "Old temporary file found:" msgstr "Alte temporäre Datei gefunden:" msgid "" "\n" "If a previous conversion did not complete, please try to remove this file " "and\n" "start over with a backup of your old configuration file." msgstr "" "\n" "Falls eine vorige Konvertierung fehlschlug, bitte versuchen Sie, diese\n" "Datei zu entfernen und mit einem Backup Ihrer alten Konfigurationsdatei\n" "neu zu starten." msgid "Upgrade configuration directives..." msgstr "Aktualisiere Konfigurationsanweisungen..." msgid "Remove temporary backup..." msgstr "Entferne temporäres Backup..." #~ msgid "Argument to the '-d' flag is not valid\n" #~ msgstr "Argument von '-d' ist nicht gültig.\n" #~ msgid "Possible argument format are: '%s' or 'n'\n" #~ msgstr "Mögliche Formate sind: %s oder 'n'\n" #~ msgid "Argument is not valid\n" #~ msgstr "Ein Argument ist nicht gültig.\n" #~ msgid "Argument format for -s and --startday is: '%s'\n" #~ msgstr "Das Format für -s und --startday ist: '%s'\n" #~ msgid "Argument format for -r and --range is: 'n'\n" #~ msgstr "Das Format für -r (--range) ist: 'n'.\n" #~ msgid "Argument for '-x' should be either 'ical' or 'pcal'\n" #~ msgstr "Argument für -x muss entweder 'ical' oder 'pcal' sein.\n" #~ msgid "" #~ "Option '-S' must be used with either '-d', '-r', '-s', '-a' or '-t'\n" #~ msgstr "Die Option -S braucht entweder -d, -r, -s, -a oder -t.\n" #~ msgid "" #~ "Option '-l' must be used with either '-d', '-r', '-s', '-a' or '-t'\n" #~ msgstr "" #~ "Die Option '-l' braucht entweder '-d', '-r', '-s', '-a' oder '-t'.\n" #~ msgid "%s does not exist, create it now [y/n]? " #~ msgstr "%s existiert nicht, jetzt erzeugen [y oder n] ? " #~ msgid "aborting...\n" #~ msgstr "abbrechen...\n" #~ msgid "%s successfully created\n" #~ msgstr "%s erfolgreich erzeugt\n" #~ msgid "starting interactive mode...\n" #~ msgstr "Starte interaktiven Modus...\n" #~ msgid "" #~ "The day you entered is not valid (should be between 01/01/1902 and " #~ "12/31/2037)" #~ msgstr "" #~ "Der eingegebene Tag ist ungültig (nicht zwischen 01/01/1902 und12/31/2037)" calcurse-4.0.0/po/LINGUAS0000644000175000017500000000006612273003161011675 00000000000000# Set of available languages. fr en de es nl ru pt_BR calcurse-4.0.0/po/ru.gmo0000644000175000017500000014510212472330423012010 00000000000000Þ•£4 3L#K#‡e#†í#öt$†k-¢ò-•.©.½.Ô.è.ÿ./X4/2œ2 ¯2º28Ë2<36A36x3)¯3)Ù3644:46o4I¦4ð45 5D55\5B’59Õ5G6-W6@…6Æ6 Î6)Ø66797N7W7!`7‚7‰7’7š7*¢7*Í7ø7ÿ7888/888A87J8:‚8,½8 ê8 ÷89D 9O9 V9a9#q9•9ž9¥9À9Ü9-ä9:: :):0:N:)S:}:'˜:3À:ô:;(!;&J;q;#Š;#®;4Ò;<*<:<C<#L< p<7|<:´<'ï<'=?=[=`=€= ‰=ª=±=º=*Ã=î=>G>G]>%¥>3Ë>ÿ>B?`?-x?D¦?<ë?((@Q@q@&Š@±@#Ñ@õ@AF4A{A›AB¶AùAB0B‰NBØB-ßB C!C"6C YC%fC0ŒC$½CâC;D>D]DvD‘D¬DÊDÓD.ÜD EEE"E)(EREWEuE"|E&ŸE,ÆEóE FVF1vF¨F°FµFºFÓFØFßF äF,ïF)G>FG…G‹GG“GšG ŸGDªGFïGE6HE|HHÂHI IHUIHžIçIùI JJ-JAJUJ\JeJnJvJJ§J°J&¶JÝJâJ8K :K:[K;–KXÒK/+L[LuLLªL$ÇLAìL.M5M ÃP Q QQQQ)#Q&MQ#tQ˜Q<·Q'ôQCR `R<RF¾RFS$LSCqS=µSFóS:T>T4DT(yT¢T¦T¸TÀT#ÃTÖçT/¾UîU6óU*V93V;mV'©V7ÑVC WMW5QW<‡W>ÄW8Xb Bb Mb!Xbzbx|dïõdÜåea ÂfØ$r¶ýr´sÈsÜsóstt:5t(pt™y5°yæy#úyaz]€zWÞz]6{)”{E¾{|:†|zÁ|n<}«}É}ß}Wó}QK~C~Há~o*\š_÷W€i€K€KÍ€9S!g ‰ ”¡°*¹*ä ‚ ‚'‚6‚?‚V‚j‚~‚VŽ‚Zå‚A@ƒ ‚ƒ ƒ ƒ‚ªƒ -„:„N„6^„•„¨„5¹„Wï„ G…?T… ”…Ÿ…¯…¿…4Ò… †D†X†Nx†Ydž,!‡8N‡@‡‡3ȇLü‡BIˆWŒˆdäˆ I‰<V‰“‰¢‰/´‰ä‰Hõ‰\>Š›Š#«Š4ÏŠ‹B ‹P‹1d‹–‹²‹È‹^ä‹-CŒqŒk„Œ„ðŒ.uE¤(êhŽ&|ŽO£Ž}óŽYq)Ëõ 7T/g+—5Ãlù+f‘/’‘o‘.2’6a’;˜’ÃÔ’˜“>¨“ç“6ö“3-”a”Ls”0À”$ñ”•}6•S´•1–(:–)c–2–À–Ï–EØ–—6—;—L—T[—°—9¿— ù—I˜:P˜\‹˜Mè˜!6™–X™iï™ Yšfšoš$xšš¬š ¾šÉšNÝšM,›iz›ä›í›ô›ù› þ› œkœm€œoîœi^mÈo6žq¦žkŸ „Ÿ Ÿ œŸ4§Ÿ/ÜŸ-  :  Q  ^ h Gw d¿ $¡(¡>9¡(x¡L¡¡î¡#n¢`’¢bó¢¤V£Sû£O¤f¤~¤+•¤EÁ¤l¥ t¥ ‚¥B¥ Ó¥ Ý¥Nè¥7¦$H¦m¦5~¦>´¦ ó¦§ § 5§B§ G§Q§q§p‰§rú§m¨O|¨>̨n ©5z©t°©%ªi6ª ªPµªf«em«cÓ«7¬U¬Z¬_¬ h¬=r¬5°¬8æ¬'­hG­B°­nó­/b®e’®{ø®ut¯2ꯋ°c©°g ±u±z±V‰±Kà±,²01²b² }²0ˆ²ß¹²B™³ܳ3í³!´n5´s¤´QµnjµÙµg¶zl¶Tç¶p<·]­· ¸¸ ¸#¸(¸-¸2¸A7¸ y¸š¸µ¸ɸé¸"¹A*¹l¹%ˆ¹D®¹1ó¹%º-@ºvnºJåº[0»UŒ»Nâ»%1¼'W¼)¼(©¼Ò¼ï¼&½)½<½P½Eg½:­½nè½EW¾2¾"о3ó¾?'¿3g¿-›¿É¿#à¿0À%5À?[ÀI›ÀZåÀN@ÁÁ4¯Á+äÁÂ!#ÂEÂ2HÂ%{Â#¡ÂÅÂ)â Ã*,ÃWÃuÃJ„Ã8ÏÃ>Ä;GăƒÄÅ)Å9EÅ5ÅSµÅ) ÆF3Æ-zƨƾÆÛÆ#ôÆÇ.8Ç"gÇ,ŠÇ*·Ç#âÇ2È"9ÈW\È.´È@ãÈ,$ÉQÉhÉzÉɤɷÉÏÉâÉöÉúÉ Ê! ÊéÄ y×m£ ™Õ»cMз†rK Öt!”*(c¨n|­¡9‹iëX&¯Ÿ½?)3Ó 16všŒ8`j:e í¸ñG!0C-¥}gVüi-OþTg#µ¢Ž[„©¶\<qÆ%b«ˆs|“¤¢‰ Ô”Dh4ãL‚Þö8ùœŒ}øs3WdÙ TH_q®Î`CtÏHàòz¦¿<äð$B“{ýÁ•âN÷KèÉZúh)ÑØ'’Â@I‹y Š6laߟ›ËM–‰ =‚&ÚœD•f‡—> 5’J"7˜‘\dîUxÜ"Evoƒo=¬ ÀŽOê,.Eõ+r^›@û'A˜¼™wˆ.Åå{~uLáìf_§ PôIçGQ7€nƒkÈjæ„1;2ÿú(: /NQF¡lJYa°]¹…5SuSP;ž±³pFžU Rš^*ͪ%‘?‡ebÌmY´z²XÇZ>WÊ,†…–Û9Rw~Ý+V£][Apó4—k#Š0$€ïÒ¾/2Bx For more information, type '?' from within Calcurse, or read the manpage. If a previous conversion did not complete, please try to remove this file and start over with a backup of your old configuration file. If a previous conversion did not complete, please try to restore your configuration from this backup and then remove the backup file. Miscellaneous: -h, --help print this help and exit. -v, --version print calcurse version and exit. --status display the status of running instances of calcurse. --read-only Don't save configuration nor appointments/todos. Use with care. Files: -c , --calendar specify the calendar to use (has precedence over '-D'). -D , --directory specify the data directory to use. If not specified, the default directory is ~/.calcurse Non-interactive: -a, --appointment print events and appointments for current day and exit. -d , --day print events and appointments for or upcoming days and exit. To specify both a starting date and a range, use the '--startday' and the '--range' option. -g, --gc run the garbage collector for note files and exit. -i , --import import the icalendar data contained in . -n, --next print next appointment within upcoming 24 hours and exit. Also given is the remaining time before this next appointment. -l , --limit only print information regarding the next items. -r[num], --range[=num] print events and appointments for the [num] number of days and exit. If no [num] is given, a range of 1 day is considered. -s[date], --startday[=date] print events and appointments from [date] and exit. If no [date] is given, the current day is considered. -S, --search= search for the given regular expression within events, appointments, and todos description. -t[num], --todo[=num] print todo list and exit. If the optional number [num] is given, then only todos having a priority equal to [num] will be returned. The priority number must be between 1 (highest) and 9 (lowest). It is also possible to specify '0' for the priority, in which case only completed tasks will be shown. -x[format], --export[=format] export user data to the specified format. Events, appointments and todos are converted and echoed to stdout. Two possible formats are available: 'ical' and 'pcal'. If the optional argument format is not given, ical format is selected by default. note: redirect standard output to export data to a file, by issuing a command such as: calcurse --export > calcurse.dat Too many errors while reading configuration file! Please backup your keys file, remove it from directory, and launch calcurse again. WARNING: it seems that another calcurse instance is already running. If this is not the case, please remove the following lock file: "%s" and restart calcurse. id: %u size: %u unfreed blocks: %u allocated in: %s number of calls: %u allocated blocks: %u "%s" assigned multiple times!# # Calcurse keys configuration file # # This file sets the keybindings used by Calcurse. # Lines beginning with "#" are comments, and ignored by Calcurse. # To assign a keybinding to an action, this file must contain a line # with the following syntax: # # ACTION KEY1 KEY2 ... KEYn # # Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn # will be pressed. # # To define bindings which use the CONTROL key, prefix the key with 'C-'. # The escape, space bar and horizontal Tab key can be specified using # the 'ESC', 'SPC' and 'TAB' keyword, respectively. # Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords. # Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END' # keywords. # # A description of what each ACTION keyword is used for is available # from calcurse online configuration menu. %d app%d apps%d event%d events%d skipped%d todo%d todos(Command used to notify user of an upcoming appointment)(Format of the date to be displayed in non-interactive mode)(Format of the date to be displayed inside notify-bar)(Format of the time to be displayed inside notify-bar)(Format to be used when entering a date: (Log activity when running in background)(Notify all appointments instead of flagged ones only)(Press '^P' or '^N' to move up or down, 'Q' to quit)(Run in background to get notifications after exiting)(Warn user if an appointment is within next 'notify-bar_warning' seconds)(currently using %s)(d)aily(d)iscard(if not null, automatically save data every 'periodic_save' minutes)(if set to YES, automatic save is done when quitting)(if set to YES, confirmation is required before deleting an event)(if set to YES, confirmation is required before quitting)(if set to YES, messages about loaded and saved data will be displayed)(if set to YES, notify-bar will be displayed)(if set to YES, progress bar will be displayed when saving data)(m)erge(m)onthly(run the garbage collector when quitting)(specifies the first day of week in the calendar view)(terminal's default)(w)eekly(y)early+------------------------------+ +1 Day+1 Month+1 Week+1 Year----------------------------------------- ---==== MEMORY BLOCK ====---------------- -1 Day-1 Month-1 Week-1 Year/!\ INTERNAL ERROR /!\Add ApptAdd ItemAdd TodoAdd a todo item, whichever panel is currently selected.Add an appointment, whichever panel is currently selected.Add an item to the currently selected panel.Appointment:AppointmentsAprilAttach (or edit if one exists) a note to the currently selected itemAugustBackgroundBlock not foundCalcurse %s - text-based organizer CalendarCancelCancel the ongoing action.Cannot daemonize, aborting Chg WinChoose the file used to export calcurse data:ColorCommandCommand:ConfigConfiguration file not found:CopyCopy the item that is currently selected.Could not access "%s": %s Could not change working directory: %s Could not detach from the controlling terminal: %s Could not fork: %s Could not read key labelCould not remove calcurse lock file: %s Could not remove daemon lock file: %s Could not set lock file Could not stop calcurse daemon: %s Could not stop daemon properly: %s Create temporary backup of the configuration file...CreditsData files found. Data will be loaded now.DecemberDel ItemDelete the currently selected item.DescriptionDisplay hints whenever some help screens are available.Display the currently selected item inside a popup window.Do you really want to delete this item?Do you really want to delete this task?Do you really want to quit?DownERROR setting first day of weekEdit ItmEdit the currently seleted item.Edit: EditNoteEnd timeEnter an option number to change its valueEnter command mode.Enter description:Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:Enter start time ([hh:mm] or [hhmm]):Enter the TODO priority [1 (highest) - 9 (lowest)]:Enter the configuration menu.Enter the date format (see 'man 3 strftime' for possible formats) Enter the date format: Enter the day to go to [ENTER for today] : %sEnter the delay, in minutes, between automatic saves (0 to disable) Enter the ending date: [%s] or '0' for an endless repetitionEnter the file name to import data from:Enter the new TODO description:Enter the new TODO item:Enter the new ending date: [%s] or '0'Enter the new item description:Enter the new repetition frequence:Enter the new repetition type:Enter the notification command Enter the number of seconds (0 not to be warned before an appointment)Enter the repetition frequence:Enter the repetition type:Enter the time format (see 'man 3 strftime' for possible formats) Error reading key: "%s"Error setting signal #%d : %s Error when closing file at %sError: both calcurse (pid: %d) and its daemon (pid: %d) seem to be running at the same time! Please check manually and restart calcurse. Event:Exit from the current menu, or quit calcurse.ExportExport data to a new file format.Export to (i)cal or (p)cal format?Exporting...FATAL ERROR: could not create %s: %s FATAL ERROR: could not create default keys file.FATAL ERROR: key value out of boundsFATAL ERROR: null file pointer.FATAL ERROR: the input file cannot be accessed, Aborting...FATAL ERROR: wrong import modeFailed to build message Failed to close "%s" - %s Failed to open "%s", - %s Failed to print message "%s" FebruaryFlag ItmFlag the currently selected item as important.ForegroundFriGeneralGo toGo to today, whichever panel is selected.HelpHelp topic does not exist: %sImportImport data from an external file.Import process report: %04d lines readInternal error while displaying progress barInternal error: line too longInvalid delayInvalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], [+xxxdxxhxxm] or [+mm]Invalid time: start time must be before end time!JanuaryJulyJuneKey label not recognizedKeysLayoutLeftLoading...Lower a task priority inside the todo panel.Mail bug reports to . Mail feature requests and suggestions to . MarchMayMonMondayMoveMove down.Move to next day in calendar, whichever panel is currently selected.Move to next month in calendar, whichever panel is currently selected.Move to next week in calendar, whichever panel is currently selected.Move to next year in calendar, whichever panel is currently selected.Move to previous day in calendar, whichever panel is currently selected.Move to previous month in calendar, whichever panel is currently selectedMove to previous week in calendar, whichever panel is currently selectedMove to previous year in calendar, whichever panel is currently selectedMove to the left.Move to the right.Move up.No log file to display!No note file found No such command: %sNotifyNovemberNxt ViewOctoberOld backup file found:Old temporary file found:OtherCmdPastePaste an item at the current position.PipePipe item to external command:Pipe the currently selected item to an external program.Please report the following bug:Possible formats are [%s] or '0' for an endless repetitionPossible formats are [%s] or '0' for an endless repetition.Pre-3.0.0 configuration file format detected, please upgrade running `calcurse-upgrade`.Pre-3.0.0 configuration file format detected...Press [ENTER] to continuePress [ENTER] to continue.Press [Enter] to continuePress any key to continue...Press the key you want to assign to:Print general information about calcurse's authors, license, etc.Prio.+Prio.-Problems accessing data file ...Prv ViewQuitRaise a task priority inside the todo panel.RedrawRedraw calcurse's screen.ReloadReload appointments and todo items.Remove temporary backup...RepeatRepeat an itemRepetitionRightSatSaveSave calcurse data.Saving...Scroll window down (e.g. when displaying text inside a popup window).Scroll window up (e.g. when displaying text inside a popup window).SelectSelect next panel in calcurse main screen.Select the day to go to.Select the first day of the current week when inside the calendar panel.Select the highlighted item.Select the last day of the current week when inside the calendar panel.SeptemberShow next possible actions inside status bar.SidebarSome actions do not have any associated key bindings!Some items could not be imported, see log file?Sorry, colors are not supported by your terminal (Press [ENTER] to continue)Sorry, the date you entered is older than the item start time.Start timeSunSundayTODOTODO:The data files were reloaded successfullyThe data files were successfully savedThe data were successfully exportedThe entered date is not valid.The file cannot be accessed, please enter another file name.The frequence you entered is not valid.The ical file seems to be malformed. The end of item was not found.There are unsaved modifications:There were some errors when loading keys file, see log file?This item has a note attached to it. Delete (i)tem or just its (n)ote?This item has a note attached to it. Delete (t)odo or just its (n)ote?This item is already a repeated one.This item is recurrent. Delete (a)ll occurences or just this (o)ne?This key is already in use for %s, please choose another one.This key is not yet recognized by calcurse, please choose another one.ThuTodayToo many errors while reading keys file, aborting...Try 'calcurse -h' for more information. TueUndefined option!UnknownUpUpgrade configuration directives...Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]] [-d |] [-s[date]] [-r[range]] [-c] [-D] [-S] [--status] [--read-only] Usage: calcurse-upgrade [-h|-v|--config ]ViewView the note attached to the currently selected item.ViewNoteWarning: could not create temporary log file, Aborting...Warning: could not erase temporary log file %s, Aborting...Warning: could not open %s, Aborting...Warning: could not open temporary log file, Aborting...Warning: ical header malformed or wrong version number. Aborting...WedWelcome to Calcurse. Missing data files were created.When adding default key for "%s", "%s" was already assigned!You entered an invalid start time, should be [hh:mm] or [hhmm]You entered an invalid time, should be [hh:mm] or [hhmm][ao][dmk][dwmy][in][ip][tn][yn]appointment has no start time.appointment not foundawakened at %s beg Weekblock seems already freed at %scalcurse is not running calcurse is running (pid %d) calcurse is running in background (pid %d) color themecompleted tasks: configuration variable unknown: "%s"corrupt block end at %s, (end = %u, should be %d)corrupt block header at %scould not allocate memory to store block infocould not compute duration (no end time).could not get entire item description.could not retrieve event end time.could not retrieve event start time.could not retrieve item summary.date error in appointmentdate error in eventdate error in item exceptiondate error in the event dbg_free: null pointer at %sdd/mm/yyyydescription malformed.doneend Weekerror in mktimeerror loading next appointment error while launching commanderror while launching command: could not forkerror while sending notification event date is not defined.event not foundfailed to open appointment filefailed to open configuration filefailed to open key filefailed to open todo filefailure in mktimegeneral optionsincoherent repetition typeinvalid configuration directive: "%s"item could not be identified.item duration malformed.item has a negative duration.item priority is not acceptable (must be between 1 and 9).keys configurationlaunching notification at %s for: "%s" layout configurationmm/dd/yyyynext appointment: nono event nor appointment foundno note attachedno such appointmentno such todonotification optionsnull pointeroption not definedout of memoryoverflow at %srecurrence exception dates malformed.recurrence frequence not found.recurrence frequence not recognized.recurrence rule malformed.sleeping at %s for %d second sleeping at %s for %d seconds started at %s syntax error in item datesyntax error in item identifiersyntax error in item repetitionsyntax error in item time or durationsyntax error in the item datetemporary file "%s" could not be createdterminated at %s with signal %d to do: todo not foundundefinedunknown characterunknown colorunknown export typeunknown ical typeunknown import typeunknown item typeunknown panelunknown repetition typeunrecognized option:wrong configuration variable format for "%s"wrong export modewrong format in the appointment or eventwrong item typexcalloc: out of memoryxcalloc: overflowxcalloc: zero sizexmalloc: out of memoryxmalloc: zero sizexrealloc: out of memoryxrealloc: overflowxrealloc: zero sizeyesyyyy-mm-ddyyyy/mm/dd| calcurse memory usage report | Project-Id-Version: calcurse Report-Msgid-Bugs-To: bugs@calcurse.org POT-Creation-Date: 2015-02-22 10:37+0100 PO-Revision-Date: 2014-08-03 21:51+0000 Last-Translator: Lukas Fleischer Language-Team: Russian (http://www.transifex.com/projects/p/calcurse/language/ru/) Language: ru MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñправки, нажмите '?' в Calcurse или Ñмотрите man-Ñтраницу. ЕÑли Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ðµ завершилаÑÑŒ, удалите файл и попробуйте Ñнова, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð°Ñ€Ñ…Ð¸Ð²Ð½Ñ‹Ð¹ файл Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ конфигурацией. ЕÑли Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ðµ завершилаÑÑŒ, воÑÑтановите вашу конфигурацию из Ñтого архивного файла, затем его удалив. Разное: -h, --help показать Ñправку. -v, --version показать верÑию calcurse. --status показать ÑÑ‚Ð°Ñ‚ÑƒÑ calcurse. --read-only Ðе Ñохр. наÑтройки, задачи и дела (будьте внимательны). Файлы: -c , --calendar иÑпользование файла ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ (приоритетен перед ключом '-D'). -D , --directory иÑпользование конкретной директории. Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾-умолчанию ~/.calcurse Ðе интерактивные: -a, --appointment показать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ задачи на текущий день. -d , --day показать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ задачи на дату или на кол-во грÑдущих дней. Ð”Ð»Ñ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ '--startday' и '--range'. -g, --gc запуÑтить Ñборщик муÑора Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² заметок. -i , --import импортировать данные icalendar в файл . -l , --limit выводит информацию о Ñледующих значениÑÑ…. -n, --next показать Ñлед. задачу и Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾ неё в пределах 24 чаÑов. -r[num], --range[=num] показать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ задачи на [num] дней. По-умолчанию значение [num] равно одному дню. -s[date], --startday[=date] показать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ задачи на указанную дату [date]. По-умолчанию значение [date] равно текущему дню. -S, --search= поиÑк регулÑрных выражений внутри опиÑÐ°Ð½Ð¸Ñ Ñобытий, задач и дел. -t[num], --todo[=num] показать ÑпиÑок дел. ЕÑли задано [num], будут показаны дела, имеющие приоритет равный значению [num]. Значение приоритета находитÑÑ Ð¼ÐµÐ¶Ð´Ñƒ 1 (выÑокий) и 9 (низкий). УÑтановка Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð²Ð½Ð¾Ð³Ð¾ '0', покажет только завершённые дела. -x[format], --export[=format] ÑкÑпорт данных Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² файл. СобытиÑ, задачи и дела будут конвертированы, а пользователь уведомлён об Ñтом. СущеÑтвуют два формата Ð´Ð»Ñ ÑкÑпорта: 'ical' and 'pcal'. Форматом по-умолчанию ÑвлÑетÑÑ ical. Примечание: перенаправление потока ÑкÑпорта данных в файл, возможно Ñлед. образом: calcurse --export > calcurse.dat Обнаружены ошибки при чтении файла наÑтроек! Сделайте копию keys-файла, удалите его из каталога и запуÑтите calcurse Ñнова. Ð’ÐИМÐÐИЕ: calcurse уже запущен. ЕÑли Ñто не так, удалите заблокированный файл: "%s" и перезапуÑтите calcurse. id: %u size: %u unfreed blocks: %u allocated in: %s number of calls: %u allocated blocks: %u "%s" определено множеÑтво времён!# #Конфигурационный файл горÑчих клавиш calcurse # #Файл задаёт привÑзку дейÑтвий к клавишам Calcurse. #Линии, начинающиеÑÑ Ñ "#", еÑть комментарии и игнорируютÑÑ Calcurse. #Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð²Ñзки горÑчей клавиши к дейÑтвию, в файл необходимо напиÑать Ñтроку, #иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñледующий ÑинтакÑиÑ: # # ДЕЙСТВИЕ КЛÐÐ’.1 КЛÐÐ’.2 ... КЛÐÐ’.N # #Где ДЕЙСТВИЕ - Ñто ЧТО должно проиÑходить при нажатии на клавиши КЛÐÐ’.1, # ..., или КЛÐÐ’.N # #Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑвÑзки Ctrl + "горÑÑ‡Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ°", иÑпользуйте Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ 'C-'. #Escape, пробел, клавиша табулÑции - обозначаютÑÑ 'ESC', 'SPC' и 'TAB' #ÑоответÑтвенно. #Клавиши Ñтрелок обозначаютÑÑ ÐºÐ°Ðº UP, DWN, LFT, RGT. #ПоÑледнее, клавиши Home и End имеют обозначение 'KEY_HOME' #и 'KEY_END'. # #ОпиÑание каждой иÑпользуемой клавиши ДЕЙСТВИЕ доÑтупно #из меню наÑтроек calcurse %d app%d apps%d apps%d Ñобытие%d ÑобытиÑ%d ÑобытиÑ%d пропущен%d дело%d дела%d дела(Команда уведомлÑет Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¾ грÑдущем Ñобытии)Формат даты отображаетÑÑ Ð² неинтерактивном режиме(Формат даты выводитÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ окна уведомлениÑ)(Формат времени выводитÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ окна уведомлениÑ)Формат Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° даты: (Лог активен во Ð²Ñ€ÐµÐ¼Ñ Ñ„Ð¾Ð½Ð¾Ð²Ð¾Ð³Ð¾ режима)(Извещать обо вÑех задачах, вмеÑто тех, которые помечены Ð´Ð»Ñ Ð¸Ð·Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ)'^P' или '^N' - вверх/вниз, 'Q' - выхода(ЗапуÑтить в фоновом режиме, Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти получать уведомлениÑ)(Предупреждать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¾ Ñобытии за 'notify-bar_warning' Ñекунд)(иÑпользуетÑÑ %s)(d)ежедневно(d)отменить(N/0) ÐвтоÑохранение каждые N минут. (Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ '0')(yes/no) ÐвтоÑохранение при выходе из программы(yes/no) Подтверждение ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñобытий(yes/no) Подтверждение выхода из программы(yes/no) Отображение ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ загрузке и Ñохранении данных(ЕÑли выбрано yes, будет выводитÑÑ Ð¾ÐºÐ½Ð¾ уведомлениÑ)(yes/no) Отображение полоÑÑ‹ загрузки ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…(m)ÑлиÑние(m)ежемеÑÑчно(yes/no) запуÑтить Ñборщик муÑора при выходе(указание первого Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ в календаре)(цвета терминала)(w)еженедельно(y)ежегодно+------------------------------+ День +МеÑÑц +ÐÐµÐ´ÐµÐ»Ñ +Год +----------------------------------------- ---==== MEMORY BLOCK ====---------------- День -МеÑÑц -ÐÐµÐ´ÐµÐ»Ñ -Год -/!\ INTERNAL ERROR /!\Доб.ЗадачуДоб.ЗапиÑьДоб.ДелоДобавить Дело. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ.Добавить Задачу. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ.Добавить запиÑÑŒ в выбранную панель.Задача:ЗадачиÐпрельПривÑзать (или задать, еÑли не ÑущеÑтвует) заметку Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ запиÑиÐвгуÑтЗадний фонBlock not foundCalcurse %s - текÑтовый органайзер КалендарьОтменитьОтмена поÑтоÑнного дейÑтвиÑ.Ðевозможно демонизировать процеÑÑ. Завершение ПанельВыберите файл Ð´Ð»Ñ ÑкÑпорта данных:ЦветаКоманда:Команда:ÐаÑтройкиФайл конфигурации не найден:Копир.Копировать выделенную запиÑÑŒ (пункт?)Ðет доÑтупа "%s": %s Ðевозможно выбрать рабочую директориюг: %s Ðевозможно прервать Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñющего терминала: %s Ðевозможно разделить: %s Ðевозможно раÑпознать клавишуÐевозможно удалить занÑтый файл: %s Ðевозможно удалить демон: %s Ðевозможно выбрать заблокированный файл Ðевозможно оÑтановить демон calcurse: %s Ðевозможно оÑтановить демон должным образом: %s Создать временную архивную копию файла конфигурации...ÐвторыДанные найдены и будут загруженыДекабрьУд.ЗапиÑьУдалить выбранную запиÑÑŒ.ОпиÑаниеПоказать Ñправку, еÑли Ñ‚Ð°ÐºÐ¾Ð²Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ÑÑ.ПроÑмотреть выбранную запиÑÑŒ во вÑплывающем окне.Удалить?Удалить Ñту запиÑÑŒ?Ð’Ñ‹ уверены, что хотите выйти?ВнизОШИБКРнаÑтройки первого Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸Ð˜Ð·Ð¼.ЗапиÑьИзменить выбранную запиÑÑŒ.Редактировать:Изм.ЗаметкуКонечное времÑВведите номер наÑтройки Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐµÑ‘ параметраВведите командный режим.ОпиÑание: Окончание ([чч:мм], [ччмм]) или задержка ([+чч:мм], [+Ñ…Ñ…Ñ…dÑ…Ñ…hÑ…Ñ…m]): Ðачало ([чч:мм] или [ччмм]). ОÑтавьте пуÑтым еÑли Ñобытие займёт веÑÑŒ день: Ðачало ([чч:мм] или [ччмм]): Приоритет дела [1 (выÑокий) - 9 (низкий)] :Войти в меню наÑтроек.Задайте формат даты (Ñм. 'man 3 strftime' Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… форматов)Задайте формат даты: Переход на N-ый день [ENTER Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ днÑ] : %sВведите задержку между автоÑохранениÑми (в минутах) или 0 Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ð´Ð°Ñ‚Ð°: [%s] или '0' Ð´Ð»Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸ÑÐ˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°: ОпиÑание дела: Дело: ÐÐ¾Ð²Ð°Ñ Ð´Ð°Ñ‚Ð° окончаниÑ: [%s] или '0'ОпиÑание: ÐÐ¾Ð²Ð°Ñ Ñ‡Ð°Ñтота повторениÑ:Введите тип повторениÑ:Введите команду ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð’Ð²ÐµÐ´Ð¸Ñ‚Ðµ количеÑтво Ñекунд (0 - отмена Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð¾ ÑобытиÑ)КоличеÑтво повторений: Ðазначить тип повторениÑ:Задайте формат времени (Ñм. 'man 3 strftime' Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… форматов) Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸: "%s"Сигнал ошибки наÑтройки #%d : %s Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° %sОшибка: calcurse (pid: %d) и его демон (pid: %d) запущены одновременно! ПожалуйÑта, проверьте Ñто и перезапуÑтите calcurse. Событие:Выйти из текущего меню или из calcurseЭкÑпортЭкÑпортировать данные в файл.Формат ÑкÑпорта (i)cal или (p)cal?ЭкÑпорт...ФÐТÐЛЬÐÐЯ ОШИБКÐ: невозможно Ñоздать %s: %s FATAL ERROR: could not create default keys file.FATAL ERROR: key value out of boundsFATAL ERROR: null file pointer.ФÐТÐЛЬÐÐЯ ОШИБКÐ: входÑщий файл не может быть добавлен. Завершение...ФÐТÐЛЬÐÐЯ ОШИБКÐ: неправильный режим импортаОшибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÐžÑˆÐ¸Ð±ÐºÐ° Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ "%s" - %s Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ "%s", - %s Ошибка вывода ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ "%s" ФевральФлагПометить выбранную запиÑÑŒ как важную.Передний фонПтОÑÐ½Ð¾Ð²Ð½Ñ‹ÐµÐŸÐµÑ€ÐµÑ…Ð¾Ð´Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð´Ð°Ñ‚Ð°. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ.СправкаРаздел Ñправки не ÑущеÑтвует: %sИмпортИмпортированть данные Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ файла.Отчёт процеÑÑа импорта:%04d lines readВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° полоÑÑ‹ загрузкиВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñлишком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ ÑтрокаÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ°Ðеверно указано конечное времÑ/задержка, должно быть [+чч:мм], [+хххДххЧххМ] или [+мм]Ðеверное времÑ: Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° должно идти до времени концаЯнварьИюльИюньКлавиша не опознанаКлавишиРаÑполож.ВлевоЗагрузка...Понизить приоритет дела внутри ÑпиÑка дел.Ðайденные ошибки выÑылайте на . Ðайденные ошибки или ваши идеи, приÑылайте на . МартМайПнПнВперёдВнизСледующий день календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ.Следующий меÑÑц календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ.Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½ÐµÐ´ÐµÐ»Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ.Следующий год календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ.Предыдущий день календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ.Предыдущий меÑÑц календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ.ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½ÐµÐ´ÐµÐ»Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ.Предыдущий год календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ.ВлевоВправоВверхÐет log-файла Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ!Файл Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¾Ð¹ не найден Команда не обнаружено: %sУведомлениеÐоÑбрьСлед.ОктÑбрьПредыдущий файл архивной копии найден:Обнаружен предыдущий файл временного Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…:...Ð’ÑтавитьВÑтавить запиÑÑŒ в текущую позициюПрограммный канал (pipe)Программный канал (pipe) во внешнюю команду:Открыть программный канал (pipe) выбранной запиÑи Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ¹ программой.Сообщите об ошибке:Возможные форматы [%s] или '0' Ð´Ð»Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ[%s] или '0'- возможные форматы Ð´Ð»Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ.Обнаружен конфгурационный файл верÑии ниже 3.0.0. Обновите, пожалуйÑта, запуÑтив `calcurse-upgrade`.Обнаружен файл конфигурации ниже верÑии 3.0.0...Ðажмите [ENTER]Ðажмите [ENTER].Ðажмите [Enter]Ðажмите любую клавишу...Ðажмите клавишу, чтобы привÑзать её к:ПроÑмотреть оÑновную информацию об авторах, лицензии и Ñ‚.п.Приор. +Приор. -Проблемы Ñ Ð´Ð¾Ñтупом к файлу данных...Пред.ВыходПовыÑить приоритет дела внутри панели дел.ОбновитьОбновить Ñкран calcurseОбновитьОбновить задачу и ÑпиÑок дел.Удалить временный архивный файл...ПовторПовторить запиÑьПовторениеВправоСбСохр.Сохр. данные calcurseСохранение...Прокрутить окно вниз (прим.: показ текÑта внутри вÑплыв. окна).Прокрутить окно вверх (прим.: показ текÑта внутри вÑплыв. окна).ВыбратьВыбрать Ñлед. панель на главном Ñкране calcurseВыбрать день Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° на него.Выбрать первый день текущей недели внутри панели календарÑ.Выбрать подÑвеченную запиÑÑŒ.Выбрать поÑледний день текущей недели внутри панели календарÑ.СентÑбрьОтобразить в полоÑе ÑтатуÑа ещё одни возможные дейÑтвиÑ. ОбрамлениеÐекоторые дейÑÑ‚Ð²Ð¸Ñ Ð½Ðµ привÑзаны к клавишам!Ðекоторые запиÑи не были импортированы. Открыть log-файл?Цвета не поддерживаютÑÑ Ð²Ð°ÑˆÐ¸Ð¼ терминалом (Ðажмите [ENTER])Ð—Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° не ÑоответÑтвует времени начала запиÑи.Ðачальное времÑÐ’ÑÐ’ÑДелоДело:Файлы данных полноÑтью обновленыФайл данных уÑпешно ÑохранёнДанные уÑпешно ÑкÑпортированыÐеверно введена дата.Файл не может быть добавлен, попробуйте другое Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°.Ðеверно введена чаÑтота повторениÑ.Файл ical Ñкорее вÑего повреждён. Ðе найдено окончание запиÑи.Ðе Ñохранённые изменениÑ:Возникли ошибки при загрузке keys-файла. Смотреть log-файл?Эта запиÑÑŒ Ñодержит заметку. Удалить (i)запиÑÑŒ или только (n)заметку ?К делу прикреплена запиÑка. Удалить (t)дело или только (n)запиÑку ?Эта запиÑÑŒ уже повторÑетÑÑ.Эта запиÑÑŒ имеет повторениÑ. Удалить (a)вÑе подобные запиÑи или только (o)Ñту ?Эта клавиша уже иÑпользуетÑÑ Ð´Ð»Ñ %s, попробуйте другую.Эта клавиша ещё не раÑпознаётÑÑ calcurse, попробуйте другую.ЧтСегоднÑОбнаружены ошибки при чтении keys-файла, отмена...Выполните 'calcurse -h' Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñправки. Ð’Ñ‚ÐÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ Ð½Ð°Ñтройка!ÐезвеÑтный(аÑ)ВверхОбновление конфигурации...Команда: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]] [-d |] [-s[date]] [-r[range]] [-c | -D] [-S] [--status] [--read-only] ИÑпользовать: calcurse-upgrade [-h|-v|--config ]СмотретьПроÑмотр вложенной запиÑки.См.ЗаметкуВнимание: невозможно Ñоздать временный log-файл. Завершение...Внимание: невозможно очиÑтить временный log-файл %s. Завершение...Внимание: невозможно открыть %s, Завершение...Внимание: невозможно открыть временный log-файл. Завершение...Внимание: заголовок ical повреждён или неправильный номер верÑии. Завершение...СрДобро пожаловать в Calcurse. ОтÑутÑтвующие файлы данных будут Ñозданы.При назначении клав. "%s", "%s" уже была назначена!Ðеверно указано начальное времÑ, должно быть [чч:мм] или [ччмм]Ðеверно указано времÑ, должно быть [чч:мм] или [ччмм][ао][dmk][днмг][в][ip][tn][yn]задача не имеет начального времени.задача не найденапробуждение %s Ðач.неделиblock seems already freed at %scalcurse не запущен calcurse запущен (pid: %d) calcurse запущен в фоновом режиме (pid: %d) Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ ÑхемаВыполненные задачи: неизвеÑÑ‚Ð½Ð°Ñ Ð½Ð°Ñтройка переменной: "%s"corrupt block end at %s, (end = %u, should be %d)corrupt block header at %scould not allocate memory to store block infoневозможно вычиÑлить продолжительноÑть (нет времени окончаниÑ).невозможно получить опиÑание полноÑтью.невозможно воÑÑтановить Ð²Ñ€ÐµÐ¼Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ ÑобытиÑ.невозможно воÑÑтановить Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° ÑобытиÑ.невозможно воÑÑтановить Ñуммарные запиÑи.ошибка даты в задачеошибка даты в Ñобытииошибка даты в значенииошибка даты в Ñобытии dbg_free: null pointer at %sдд/мм/ггггопиÑание повреждено.завершеноКон.неделиошибка в mktimeошибка при загрузке Ñледующей задачи ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿ÑƒÑка командыошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿ÑƒÑка команды: невозможно разделитьÑÑ (fork)ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ñ‚Ð° ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ определена.Ñобытие не найденоошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° задачошибка Ð¾Ñ‚Ñ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° конфигурацииошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° ключаошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ todo-файлаошибка в mktimeОÑновные наÑтройкибеÑÑвÑзный тип повторениÑinvalid configuration directive: "%s"значение не может быть раÑпознано.значение продолжительноÑти повреждено.значение имеет отрицательную продолжительноÑть.Значение приоритета должно быть между 1 и 9.ÐаÑтройка клавишзапуÑк ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ %s длÑ: "%s" ÐаÑтройки раÑположениÑмм/дд/Ð³Ð³Ð³Ð³Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°: noÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ задачи не найденызапиÑка отÑутÑтвуетзадача отÑутÑтвуетдело не найденонаÑтройки уведомлениÑпуÑтой указательпараметр не уÑтановленнехватка памÑтиoverflow at %sрекурентные ÑÐ¾Ð¾Ñ‚Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ Ð´Ð°Ñ‚ повреждены.чаÑтота повторений не найдена.чаÑтота повторений не раÑпознана.рекурентные правила повреждены.ÑпÑщий режим %s на %d Ñек. ÑпÑщий режим %s на %d Ñек. ÑпÑщий режим %s на %d Ñек. запуÑк в %s опечатка в запиÑи датыопечатка в запиÑи опознавателÑопечатка в запиÑи повторениÑопечатка в запиÑи даты или продолжительноÑтиопечатка в запиÑе датывременный файл "%s" не может быть Ñозданзавершено %s Ñ Ñигналом %d СпиÑок дел: дело не найденонеопределенонеизвеÑтный ÑимволнеизвеÑтный цветнеизвеÑтный тип ÑкÑпортанеизвеÑтный тип icalнеизвеÑтный тип импортанеизвеÑтный тип запиÑинеизвеÑÑ‚Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒÐ½ÐµÐ¸Ð·Ð²ÐµÑтный тип повторениÑнеизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ:неверный формат переменной конфигурации Ð´Ð»Ñ "%s"ошибочный режим ÑкÑпортаневерный формат ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸Ð»Ð¸ задачинеправильный тип запиÑиxcalloc: out of memoryxcalloc: overflowxcalloc: zero sizexmalloc: out of memoryxmalloc: zero sizexrealloc: out of memoryxrealloc: overflowxrealloc: zero sizeyesгггг-мм-ддгггг/мм/дд| calcurse memory usage report | calcurse-4.0.0/po/POTFILES.in0000644000175000017500000000066712273003161012434 00000000000000# List of source files which contain translatable strings. src/apoint.c src/args.c src/calcurse.c src/config.c src/custom.c src/day.c src/dmon.c src/event.c src/getstring.c src/help.c src/ical.c src/io.c src/keys.c src/llist.c src/mem.c src/note.c src/notify.c src/pcal.c src/recur.c src/sha1.c src/sigs.c src/todo.c src/ui-calendar.c src/ui-day.c src/ui-todo.c src/utf8.c src/utils.c src/vars.c src/wins.c scripts/calcurse-upgrade.sh.in calcurse-4.0.0/po/es.po0000644000175000017500000007260612472326722011644 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR calcurse Development Team # This file is distributed under the same license as the PACKAGE package. # # Translators: # Lukas Fleischer , 2011 msgid "" msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: bugs@calcurse.org\n" "POT-Creation-Date: 2015-02-22 10:37+0100\n" "PO-Revision-Date: 2014-08-03 21:51+0000\n" "Last-Translator: Lukas Fleischer \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/calcurse/" "language/es/)\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "null pointer" msgstr "" msgid "date error in appointment" msgstr "" msgid "no such appointment" msgstr "" msgid "" "Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" " [-c] [-D] [-S] [--status]\n" " [--read-only]\n" msgstr "" msgid "Try 'calcurse -h' for more information.\n" msgstr "Prueba con 'calcurse -h' para mas informacion.\n" msgid "" "\n" "Copyright (c) 2004-2015 calcurse Development Team.\n" "This is free software; see the source for copying conditions.\n" msgstr "" #, c-format msgid "Calcurse %s - text-based organizer\n" msgstr " Calcurse %s - organizador basado en modo texto\n" msgid "" "\n" "For more information, type '?' from within Calcurse, or read the manpage.\n" msgstr "" "\n" "Para mas informacion, pulsa '?' dentro de Calcurse, o lee la pagina del " "man.\n" msgid "Mail feature requests and suggestions to .\n" msgstr "" msgid "Mail bug reports to .\n" msgstr "" msgid "" "\n" "Miscellaneous:\n" " -h, --help\n" "\tprint this help and exit.\n" "\n" " -v, --version\n" "\tprint calcurse version and exit.\n" "\n" " --status\n" "\tdisplay the status of running instances of calcurse.\n" "\n" " --read-only\n" "\tDon't save configuration nor appointments/todos. Use with care.\n" "\n" "Files:\n" " -c , --calendar \n" "\tspecify the calendar to use (has precedence over '-D').\n" "\n" " -D , --directory \n" "\tspecify the data directory to use.\n" "\tIf not specified, the default directory is ~/.calcurse\n" "\n" "Non-interactive:\n" " -a, --appointment\n" " \tprint events and appointments for current day and exit.\n" "\n" " -d , --day \n" "\tprint events and appointments for or upcoming days and\n" "\texit. To specify both a starting date and a range, use the\n" "\t'--startday' and the '--range' option.\n" "\n" " -g, --gc\n" "\trun the garbage collector for note files and exit. \n" "\n" " -i , --import \n" "\timport the icalendar data contained in . \n" "\n" " -n, --next\n" "\tprint next appointment within upcoming 24 hours and exit. Also given\n" "\tis the remaining time before this next appointment.\n" "\n" " -l , --limit \n" "\tonly print information regarding the next items. \n" "\n" " -r[num], --range[=num]\n" "\tprint events and appointments for the [num] number of days\n" "\tand exit. If no [num] is given, a range of 1 day is considered.\n" "\n" " -s[date], --startday[=date]\n" "\tprint events and appointments from [date] and exit.\n" "\tIf no [date] is given, the current day is considered.\n" "\n" " -S, --search=\n" "\tsearch for the given regular expression within events, appointments,\n" "\tand todos description.\n" "\n" " -t[num], --todo[=num]\n" "\tprint todo list and exit. If the optional number [num] is given,\n" "\tthen only todos having a priority equal to [num] will be returned.\n" "\tThe priority number must be between 1 (highest) and 9 (lowest).\n" "\tIt is also possible to specify '0' for the priority, in which case\n" "\tonly completed tasks will be shown.\n" "\n" " -x[format], --export[=format]\n" "\texport user data to the specified format. Events, appointments and\n" "\ttodos are converted and echoed to stdout.\n" "\tTwo possible formats are available: 'ical' and 'pcal'.\n" "\tIf the optional argument format is not given, ical format is\n" "\tselected by default.\n" "\tnote: redirect standard output to export data to a file,\n" "\tby issuing a command such as: calcurse --export > calcurse.dat\n" msgstr "" #, c-format msgid "" "Error: both calcurse (pid: %d) and its daemon (pid: %d)\n" "seem to be running at the same time!\n" "Please check manually and restart calcurse.\n" msgstr "" #, c-format msgid "calcurse is running (pid %d)\n" msgstr "" #, c-format msgid "calcurse is running in background (pid %d)\n" msgstr "" msgid "calcurse is not running\n" msgstr "" msgid "completed tasks:\n" msgstr "" msgid "to do:\n" msgstr "Tareas pendientes:\n" msgid "next appointment:\n" msgstr "Proxima cita:\n" #, c-format msgid "invalid date: %s" msgstr "" #, c-format msgid "invalid range: %s" msgstr "" #, c-format msgid "invalid priority: %s" msgstr "" #, c-format msgid "invalid export format: %s" msgstr "" msgid "invalid filter mask" msgstr "" msgid "cannot handle more than one regular expression" msgstr "" #, c-format msgid "could not compile regular expression: %s" msgstr "" #, c-format msgid "invalid date range: %s" msgstr "" msgid "invalid argument combination" msgstr "" msgid "cannot specify a range and an end date" msgstr "" msgid "Export to (i)cal or (p)cal format?" msgstr "" msgid "[ip]" msgstr "" msgid "Do you really want to quit?" msgstr "" msgid "Command:" msgstr "" #, c-format msgid "Help topic does not exist: %s" msgstr "" #, c-format msgid "No such command: %s" msgstr "" msgid "unknown color" msgstr "" msgid "failed to open configuration file" msgstr "" #, c-format msgid "invalid configuration directive: \"%s\"" msgstr "" msgid "" "Pre-3.0.0 configuration file format detected, please upgrade running " "`calcurse-upgrade`." msgstr "" #, c-format msgid "configuration variable unknown: \"%s\"" msgstr "" #, c-format msgid "wrong configuration variable format for \"%s\"" msgstr "" msgid "layout configuration" msgstr "" msgid "Foreground" msgstr "Color del texto" msgid "Background" msgstr "Color del fondo" msgid "(terminal's default)" msgstr "(el del terminal por defecto)" msgid "color theme" msgstr "" msgid "(if set to YES, compact panels are used)" msgstr "" msgid "Calendar" msgstr "Calendario" msgid "Appointments" msgstr "Citas y eventos" msgid "TODO" msgstr "" msgid "(specifies the panel that is selected by default)" msgstr "" msgid "(if set to YES, automatic save is done when quitting)" msgstr "(si se fija en SI, se guardan automaticamente los datos al salir)" msgid "(run the garbage collector when quitting)" msgstr "" msgid "(if not null, automatically save data every 'periodic_save' minutes)" msgstr "" msgid "(if set to YES, confirmation is required before quitting)" msgstr "(si se fija en SI, se requiere confirmacion antes de salir)" msgid "(if set to YES, confirmation is required before deleting an event)" msgstr "(si se fija en SI, se requiere confirmacion antes de borrar un evento)" msgid "(if set to YES, messages about loaded and saved data will be displayed)" msgstr "" msgid "(if set to YES, progress bar will be displayed when saving data)" msgstr "" msgid "Monday" msgstr "" msgid "Sunday" msgstr "" msgid "(specifies the first day of week in the calendar view)" msgstr "" msgid "(Format of the date to be displayed in non-interactive mode)" msgstr "" msgid "(Format to be used when entering a date: " msgstr "" msgid "Enter an option number to change its value" msgstr "" msgid "(Press '^P' or '^N' to move up or down, 'Q' to quit)" msgstr "" msgid "Enter the date format (see 'man 3 strftime' for possible formats) " msgstr "" "Introduce el formato de la fecha (ver 'man 3 strftime' para los formatos\n" "posibles) " msgid "Enter the date format: " msgstr "" msgid "Enter the delay, in minutes, between automatic saves (0 to disable) " msgstr "" msgid "general options" msgstr "" msgid "Undefined option!" msgstr "" msgid "undefined" msgstr "" msgid "keys configuration" msgstr "" msgid "Press the key you want to assign to:" msgstr "" msgid "This key is not yet recognized by calcurse, please choose another one." msgstr "" #, c-format msgid "This key is already in use for %s, please choose another one." msgstr "" msgid "Some actions do not have any associated key bindings!" msgstr "" msgid "" "Sorry, colors are not supported by your terminal\n" "(Press [ENTER] to continue)" msgstr "" "Lo siento, tu terminal no soporta colores\n" "(Pulsa [INTRO] para continuar)" msgid "unknown item type" msgstr "" msgid "Event:" msgstr "" msgid "Appointment:" msgstr "" #, c-format msgid "Could not stop daemon properly: %s\n" msgstr "" #, c-format msgid "terminated at %s with signal %d\n" msgstr "" #, c-format msgid "Could not remove daemon lock file: %s\n" msgstr "" #, c-format msgid "Could not fork: %s\n" msgstr "" #, c-format msgid "Could not detach from the controlling terminal: %s\n" msgstr "" #, c-format msgid "Could not change working directory: %s\n" msgstr "" msgid "Cannot daemonize, aborting\n" msgstr "" msgid "Could not set lock file\n" msgstr "" #, c-format msgid "Could not access \"%s\": %s\n" msgstr "" #, c-format msgid "started at %s\n" msgstr "" msgid "error loading next appointment\n" msgstr "" #, c-format msgid "launching notification at %s for: \"%s\"\n" msgstr "" msgid "error while sending notification\n" msgstr "" #, c-format msgid "sleeping at %s for %d second\n" msgid_plural "sleeping at %s for %d seconds\n" msgstr[0] "" msgstr[1] "" #, c-format msgid "awakened at %s\n" msgstr "" #, c-format msgid "Could not stop calcurse daemon: %s\n" msgstr "" msgid "date error in event" msgstr "" msgid "date error in the event\n" msgstr "" msgid "Internal error: line too long" msgstr "" msgid "out of memory" msgstr "" msgid "unknown ical type" msgstr "" msgid "recurrence frequence not found." msgstr "" msgid "recurrence frequence not recognized." msgstr "" msgid "recurrence rule malformed." msgstr "" msgid "recurrence exception dates malformed." msgstr "" msgid "could not get entire item description." msgstr "" msgid "description malformed." msgstr "" msgid "appointment has no start time." msgstr "" msgid "could not compute duration (no end time)." msgstr "" msgid "item has a negative duration." msgstr "" msgid "event date is not defined." msgstr "" msgid "item could not be identified." msgstr "" msgid "could not retrieve item summary." msgstr "" msgid "could not retrieve event start time." msgstr "" msgid "could not retrieve event end time." msgstr "" msgid "item duration malformed." msgstr "" msgid "The ical file seems to be malformed. The end of item was not found." msgstr "" msgid "item priority is not acceptable (must be between 1 and 9)." msgstr "" msgid "Warning: ical header malformed or wrong version number. Aborting..." msgstr "" msgid "Saving..." msgstr "Guardando..." msgid "Loading..." msgstr "Cargando..." msgid "Exporting..." msgstr "Exportando..." msgid "Internal error while displaying progress bar" msgstr "" msgid "Choose the file used to export calcurse data:" msgstr "Elige el archivo que se usara para exportar los datos de Calcurse:" msgid "The file cannot be accessed, please enter another file name." msgstr "El archivo no es accesible, por favor elige otro nombre de archivo." msgid "Press [ENTER] to continue." msgstr "Pulsa [INTRO] para continuar." #, c-format msgid "Failed to open \"%s\", - %s\n" msgstr "" msgid "Failed to build message\n" msgstr "" #, c-format msgid "Failed to print message \"%s\"\n" msgstr "" #, c-format msgid "Failed to close \"%s\" - %s\n" msgstr "" #, c-format msgid "%s does not exist" msgstr "" msgid "Problems accessing data file ..." msgstr "Problemas al acceder al fichero de datos..." msgid "The data files were successfully saved" msgstr "Los archivos de datos se han salvado con exito" msgid "Press [ENTER] to continue" msgstr "Pulsa [INTRO] para continuar" msgid "failed to open appointment file" msgstr "" msgid "syntax error in the item date" msgstr "" msgid "no event nor appointment found" msgstr "" msgid "syntax error in item time or duration" msgstr "" msgid "syntax error in item identifier" msgstr "" msgid "wrong format in the appointment or event" msgstr "" msgid "syntax error in item repetition" msgstr "" msgid "failed to open todo file" msgstr "" msgid "The data files were reloaded successfully" msgstr "" msgid "There are unsaved modifications:" msgstr "" msgid "(d)iscard" msgstr "" msgid "(m)erge" msgstr "" msgid "(k)eep and cancel" msgstr "" msgid "[dmk]" msgstr "" msgid "failed to open key file" msgstr "" msgid "" "\n" "Too many errors while reading configuration file!\n" "Please backup your keys file, remove it from directory, and launch calcurse " "again.\n" msgstr "" msgid "Could not read key label" msgstr "" msgid "Key label not recognized" msgstr "" #, c-format msgid "Error reading key: \"%s\"" msgstr "" #, c-format msgid "\"%s\" assigned multiple times!" msgstr "" msgid "There were some errors when loading keys file, see log file?" msgstr "" msgid "Too many errors while reading keys file, aborting..." msgstr "" #, c-format msgid "FATAL ERROR: could not create %s: %s\n" msgstr "" msgid "Welcome to Calcurse. Missing data files were created." msgstr "Bienvenid@ a Calcurse. Se crearon los archivos de datos que faltaban." msgid "Data files found. Data will be loaded now." msgstr "Archivos de datos encontrados. Ahora se cargaran los datos." msgid "The data were successfully exported" msgstr "Los datos se han exportado correctamente" msgid "unknown export type" msgstr "" msgid "wrong export mode" msgstr "" msgid "Enter the file name to import data from:" msgstr "" #, c-format msgid "Import process report: %04d lines read" msgstr "" msgid "unknown import type" msgstr "" msgid "FATAL ERROR: the input file cannot be accessed, Aborting..." msgstr "" msgid "FATAL ERROR: wrong import mode" msgstr "" #, c-format msgid "%d app" msgid_plural "%d apps" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d event" msgid_plural "%d events" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d todo" msgid_plural "%d todos" msgstr[0] "" msgstr[1] "" #, c-format msgid "%d skipped" msgstr "" msgid "Some items could not be imported, see log file?" msgstr "" msgid "Warning: could not open temporary log file, Aborting..." msgstr "" msgid "Warning: could not create temporary log file, Aborting..." msgstr "" msgid "No log file to display!" msgstr "" #, c-format msgid "Warning: could not erase temporary log file %s, Aborting..." msgstr "" msgid "Invalid delay" msgstr "" #, c-format msgid "" "\n" "WARNING: it seems that another calcurse instance is already running.\n" "If this is not the case, please remove the following lock file: \n" "\"%s\"\n" "and restart calcurse.\n" msgstr "" msgid "Cancel" msgstr "" msgid "Select" msgstr "" msgid "Credits" msgstr "" msgid "Help" msgstr "Ayuda" msgid "Quit" msgstr "Salir" msgid "Save" msgstr "Guardar" msgid "Reload" msgstr "" msgid "Copy" msgstr "" msgid "Paste" msgstr "" msgid "Chg Win" msgstr "" msgid "Import" msgstr "" msgid "Export" msgstr "Exportar" msgid "Go to" msgstr "Ir a" msgid "OtherCmd" msgstr "Otros comandos" msgid "Config" msgstr "Config" msgid "Redraw" msgstr "Redibujar" msgid "Add Appt" msgstr "Añadir Cita" msgid "Add Todo" msgstr "Añadir tarea" msgid "-1 Day" msgstr "" msgid "+1 Day" msgstr "" msgid "-1 Week" msgstr "" msgid "+1 Week" msgstr "" msgid "-1 Month" msgstr "" msgid "+1 Month" msgstr "" msgid "-1 Year" msgstr "" msgid "+1 Year" msgstr "" msgid "Nxt View" msgstr "" msgid "Prv View" msgstr "" msgid "Today" msgstr "" msgid "Command" msgstr "" msgid "Right" msgstr "" msgid "Left" msgstr "" msgid "Down" msgstr "" msgid "Up" msgstr "" msgid "beg Week" msgstr "" msgid "end Week" msgstr "" msgid "Add Item" msgstr "Añadir elemento" msgid "Del Item" msgstr "Borrar elemento" msgid "Edit Itm" msgstr "Editar elemento" msgid "View" msgstr "Vista" msgid "Pipe" msgstr "" msgid "Flag Itm" msgstr "Marcar elemento" msgid "Repeat" msgstr "Repetir" msgid "EditNote" msgstr "" msgid "ViewNote" msgstr "" msgid "Prio.+" msgstr "" msgid "Prio.-" msgstr "" msgid "" "#\n" "# Calcurse keys configuration file\n" "#\n" "# This file sets the keybindings used by Calcurse.\n" "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n" "# To assign a keybinding to an action, this file must contain a line\n" "# with the following syntax:\n" "#\n" "# ACTION KEY1 KEY2 ... KEYn\n" "#\n" "# Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn\n" "# will be pressed.\n" "#\n" "# To define bindings which use the CONTROL key, prefix the key with 'C-'.\n" "# The escape, space bar and horizontal Tab key can be specified using\n" "# the 'ESC', 'SPC' and 'TAB' keyword, respectively.\n" "# Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords.\n" "# Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END'\n" "# keywords.\n" "#\n" "# A description of what each ACTION keyword is used for is available\n" "# from calcurse online configuration menu.\n" msgstr "" msgid "FATAL ERROR: could not create default keys file." msgstr "" msgid "FATAL ERROR: key value out of bounds" msgstr "" msgid "General" msgstr "General" msgid "Layout" msgstr "Disposicion" msgid "Sidebar" msgstr "" msgid "Color" msgstr "Color" msgid "Notify" msgstr "Notificaciones" msgid "Keys" msgstr "" msgid "Unknown" msgstr "" msgid "Cancel the ongoing action." msgstr "" msgid "Select the highlighted item." msgstr "" msgid "Print general information about calcurse's authors, license, etc." msgstr "" msgid "Display hints whenever some help screens are available." msgstr "" msgid "Exit from the current menu, or quit calcurse." msgstr "" msgid "Save calcurse data." msgstr "" msgid "Reload appointments and todo items." msgstr "" msgid "Copy the item that is currently selected." msgstr "" msgid "Paste an item at the current position." msgstr "" msgid "Select next panel in calcurse main screen." msgstr "" msgid "Import data from an external file." msgstr "" msgid "Export data to a new file format." msgstr "" msgid "Select the day to go to." msgstr "" msgid "Show next possible actions inside status bar." msgstr "" msgid "Enter the configuration menu." msgstr "" msgid "Redraw calcurse's screen." msgstr "" msgid "Add an appointment, whichever panel is currently selected." msgstr "" msgid "Add a todo item, whichever panel is currently selected." msgstr "" msgid "" "Move to previous day in calendar, whichever panel is currently selected." msgstr "" msgid "Move to next day in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous week in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next week in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous month in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next month in calendar, whichever panel is currently selected." msgstr "" msgid "" "Move to previous year in calendar, whichever panel is currently selected" msgstr "" msgid "Move to next year in calendar, whichever panel is currently selected." msgstr "" msgid "Scroll window down (e.g. when displaying text inside a popup window)." msgstr "" msgid "Scroll window up (e.g. when displaying text inside a popup window)." msgstr "" msgid "Go to today, whichever panel is selected." msgstr "" msgid "Enter command mode." msgstr "" msgid "Move to the right." msgstr "" msgid "Move to the left." msgstr "" msgid "Move down." msgstr "" msgid "Move up." msgstr "" msgid "" "Select the first day of the current week when inside the calendar panel." msgstr "" msgid "Select the last day of the current week when inside the calendar panel." msgstr "" msgid "Add an item to the currently selected panel." msgstr "" msgid "Delete the currently selected item." msgstr "" msgid "Edit the currently seleted item." msgstr "" msgid "Display the currently selected item inside a popup window." msgstr "" msgid "Flag the currently selected item as important." msgstr "" msgid "Repeat an item" msgstr "" msgid "Pipe the currently selected item to an external program." msgstr "" msgid "Attach (or edit if one exists) a note to the currently selected item" msgstr "" msgid "View the note attached to the currently selected item." msgstr "" msgid "Raise a task priority inside the todo panel." msgstr "" msgid "Lower a task priority inside the todo panel." msgstr "" msgid "FATAL ERROR: null file pointer." msgstr "" #, c-format msgid "When adding default key for \"%s\", \"%s\" was already assigned!" msgstr "" msgid "xmalloc: zero size" msgstr "" msgid "xmalloc: out of memory" msgstr "" msgid "xcalloc: zero size" msgstr "" msgid "xcalloc: overflow" msgstr "" msgid "xcalloc: out of memory" msgstr "" msgid "xrealloc: zero size" msgstr "" msgid "xrealloc: overflow" msgstr "" msgid "xrealloc: out of memory" msgstr "" msgid "could not allocate memory to store block info" msgstr "" msgid "Block not found" msgstr "" #, c-format msgid "overflow at %s" msgstr "" #, c-format msgid "dbg_free: null pointer at %s" msgstr "" #, c-format msgid "block seems already freed at %s" msgstr "" #, c-format msgid "corrupt block header at %s" msgstr "" #, c-format msgid "corrupt block end at %s, (end = %u, should be %d)" msgstr "" msgid "---==== MEMORY BLOCK ====----------------\n" msgstr "" #, c-format msgid " id: %u\n" msgstr "" #, c-format msgid " size: %u\n" msgstr "" #, c-format msgid " allocated in: %s\n" msgstr "" msgid "-----------------------------------------\n" msgstr "" msgid "+------------------------------+\n" msgstr "" msgid "| calcurse memory usage report |\n" msgstr "" #, c-format msgid " number of calls: %u\n" msgstr "" #, c-format msgid " allocated blocks: %u\n" msgstr "" #, c-format msgid " unfreed blocks: %u\n" msgstr "" #, c-format msgid "Warning: could not open %s, Aborting..." msgstr "" msgid "error while launching command: could not fork" msgstr "" msgid "error while launching command" msgstr "" msgid "(if set to YES, notify-bar will be displayed)" msgstr "(si se fija en SI, se mostrara la barra de notificaciones)" msgid "(Format of the date to be displayed inside notify-bar)" msgstr "(Formato de la fecha dentro de la barra de notificaciones)" msgid "(Format of the time to be displayed inside notify-bar)" msgstr "(Formato de la hora dentro de la barra de notificaciones)" msgid "" "(Warn user if an appointment is within next 'notify-bar_warning' seconds)" msgstr "" "(Alarma de cita en los proximos 'alarma_barra-notificaciones' segundos)" msgid "(Command used to notify user of an upcoming appointment)" msgstr "(Comando usado para notificar al usuario una cita proxima)" msgid "(Notify all appointments instead of flagged ones only)" msgstr "" msgid "(Run in background to get notifications after exiting)" msgstr "" msgid "(Log activity when running in background)" msgstr "" msgid "Enter the time format (see 'man 3 strftime' for possible formats) " msgstr "" "Introduce el formato de la hora (ver 'man 3 strftime' para los formatos\n" "posibles) " msgid "Enter the number of seconds (0 not to be warned before an appointment)" msgstr "" "Introduce el numero de segundos (con 0 no se avisara antes de una cita)" msgid "Enter the notification command " msgstr "Introduce el comando de notificacion" msgid "notification options" msgstr "" msgid "incoherent repetition type" msgstr "" msgid "unknown repetition type" msgstr "" msgid "unknown character" msgstr "" msgid "event not found" msgstr "" msgid "appointment not found" msgstr "" msgid "syntax error in item date" msgstr "" msgid "date error in item exception" msgstr "" #, c-format msgid "Could not remove calcurse lock file: %s\n" msgstr "" #, c-format msgid "Error setting signal #%d : %s\n" msgstr "" msgid "no note attached" msgstr "" msgid "no such todo" msgstr "" msgid "todo not found" msgstr "" msgid "ERROR setting first day of week" msgstr "" #, fuzzy msgid "The day you entered is not valid" msgstr "La frecuencia que has introducido no es valida." #, c-format msgid "Enter the day to go to [ENTER for today] : %s" msgstr "" msgid "Enter start time ([hh:mm] or [hhmm]):" msgstr "" msgid "Press [Enter] to continue" msgstr "Pulsa [INTRO] para continuar" msgid "You entered an invalid time, should be [hh:mm] or [hhmm]" msgstr "" msgid "Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):" msgstr "" msgid "Invalid time: start time must be before end time!" msgstr "Hora no valida: La hora de inicio debe ser anterior a la hora final!" msgid "Enter the new item description:" msgstr "Introduce la descripcion del nuevo elemento:" msgid "Enter the new repetition type:" msgstr "" msgid "(d)aily" msgstr "" msgid "(w)eekly" msgstr "" msgid "(m)onthly" msgstr "" msgid "(y)early" msgstr "" #, c-format msgid "(currently using %s)" msgstr "" msgid "[dwmy]" msgstr "" msgid "The frequence you entered is not valid." msgstr "La frecuencia que has introducido no es valida." msgid "The entered date is not valid." msgstr "La fecha introducida no es valida." #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition." msgstr "" msgid "Enter the new repetition frequence:" msgstr "Introduce la nueva frecuencia de repeticion:" #, c-format msgid "Enter the new ending date: [%s] or '0'" msgstr "" msgid "Description" msgstr "" msgid "Repetition" msgstr "" msgid "Edit: " msgstr "" msgid "Start time" msgstr "" msgid "End time" msgstr "" msgid "Move" msgstr "" msgid "Pipe item to external command:" msgstr "" msgid "Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:" msgstr "" msgid "Enter description:" msgstr "" msgid "You entered an invalid start time, should be [hh:mm] or [hhmm]" msgstr "" msgid "" "Invalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], " "[+xxxdxxhxxm] or [+mm]" msgstr "" msgid "Do you really want to delete this item?" msgstr "" msgid "This item is recurrent. Delete (a)ll occurences or just this (o)ne?" msgstr "" msgid "[ao]" msgstr "" msgid "This item has a note attached to it. Delete (i)tem or just its (n)ote?" msgstr "" msgid "[in]" msgstr "" msgid "Enter the repetition type:" msgstr "" msgid "Enter the repetition frequence:" msgstr "Introduce la frecuencia de repeticion:" #, c-format msgid "Enter the ending date: [%s] or '0' for an endless repetition" msgstr "" #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition" msgstr "" msgid "This item is already a repeated one." msgstr "Este elemento es ya un elemento repetido." msgid "Sorry, the date you entered is older than the item start time." msgstr "La fecha que has introducido es anterior a la de inicio del elemento." msgid "wrong item type" msgstr "" msgid "Enter the new TODO item:" msgstr "" msgid "Enter the TODO priority [1 (highest) - 9 (lowest)]:" msgstr "" msgid "Do you really want to delete this task?" msgstr "" msgid "This item has a note attached to it. Delete (t)odo or just its (n)ote?" msgstr "" msgid "[tn]" msgstr "" msgid "Enter the new TODO description:" msgstr "" msgid "TODO:" msgstr "" msgid "/!\\ INTERNAL ERROR /!\\" msgstr "" msgid "Please report the following bug:" msgstr "" msgid "[yn]" msgstr "" msgid "Press any key to continue..." msgstr "Pulsa cualquier tecla para continuar..." msgid "failure in mktime" msgstr "" msgid "error in mktime" msgstr "" msgid "yes" msgstr "si" msgid "no" msgstr "no" msgid "option not defined" msgstr "" #, c-format msgid "temporary file \"%s\" could not be created" msgstr "" #, c-format msgid "Error when closing file at %s" msgstr "" msgid "No note file found\n" msgstr "" msgid "January" msgstr "Enero" msgid "February" msgstr "Febrero" msgid "March" msgstr "Marzo" msgid "April" msgstr "Abril" msgid "May" msgstr "Mayo" msgid "June" msgstr "Junio" msgid "July" msgstr "Julio" msgid "August" msgstr "Agosto" msgid "September" msgstr "Septiembre" msgid "October" msgstr "Octubre" msgid "November" msgstr "Noviembre" msgid "December" msgstr "Diciembre" msgid "Sun" msgstr "Dom" msgid "Mon" msgstr "Lun" msgid "Tue" msgstr "Mar" msgid "Wed" msgstr "Mie" msgid "Thu" msgstr "Jue" msgid "Fri" msgstr "Vie" msgid "Sat" msgstr "Sab" msgid "mm/dd/yyyy" msgstr "" msgid "dd/mm/yyyy" msgstr "" msgid "yyyy/mm/dd" msgstr "" msgid "yyyy-mm-dd" msgstr "" msgid "unknown panel" msgstr "" msgid "Usage: calcurse-upgrade [-h|-v|--config ]" msgstr "" msgid "unrecognized option:" msgstr "" msgid "Configuration file not found:" msgstr "" msgid "Pre-3.0.0 configuration file format detected..." msgstr "" msgid "Create temporary backup of the configuration file..." msgstr "" msgid "Old backup file found:" msgstr "" msgid "" "\n" "If a previous conversion did not complete, please try to restore your\n" "configuration from this backup and then remove the backup file." msgstr "" msgid "done" msgstr "" msgid "Old temporary file found:" msgstr "" msgid "" "\n" "If a previous conversion did not complete, please try to remove this file " "and\n" "start over with a backup of your old configuration file." msgstr "" msgid "Upgrade configuration directives..." msgstr "" msgid "Remove temporary backup..." msgstr "" #~ msgid "Argument to the '-d' flag is not valid\n" #~ msgstr "El argumento pasado a la opcion -d no es valido\n" #~ msgid "aborting...\n" #~ msgstr "abortando...\n" #~ msgid "%s successfully created\n" #~ msgstr "%s creado con exito\n" #~ msgid "starting interactive mode...\n" #~ msgstr "arrancando modo interactivo...\n" calcurse-4.0.0/po/en@boldquot.header0000644000175000017500000000247112472330401014301 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # calcurse-4.0.0/po/insert-header.sin0000644000175000017500000000124012472330401014111 00000000000000# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } calcurse-4.0.0/po/quot.sed0000644000175000017500000000023112472330401012330 00000000000000s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g calcurse-4.0.0/po/Makefile.in.in0000644000175000017500000003024112472330401013321 00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2004 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.14 PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = $(datadir)/locale gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: all-@USE_NLS@ all-yes: stamp-po all-no: # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @echo "touch stamp-po" @echo timestamp > stamp-poT @mv stamp-poT stamp-po # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)' test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all $(mkinstalldirs) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkinstalldirs) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: $(mkinstalldirs) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkinstalldirs) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(MAKE) update-po @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir); \ else \ cp -p $(srcdir)/$$file $(distdir); \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ $(SHELL) ./config.status force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: calcurse-4.0.0/po/ru.po0000644000175000017500000015531712472326722011664 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR calcurse Development Team # This file is distributed under the same license as the PACKAGE package. # # Translators: # Aleksey Mekhonoshin , 2011-2012 # Aleksey Mekhonoshin , 2012-2014 # Lukas Fleischer , 2011 msgid "" msgstr "" "Project-Id-Version: calcurse\n" "Report-Msgid-Bugs-To: bugs@calcurse.org\n" "POT-Creation-Date: 2015-02-22 10:37+0100\n" "PO-Revision-Date: 2014-08-03 21:51+0000\n" "Last-Translator: Lukas Fleischer \n" "Language-Team: Russian (http://www.transifex.com/projects/p/calcurse/" "language/ru/)\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgid "null pointer" msgstr "пуÑтой указатель" msgid "date error in appointment" msgstr "ошибка даты в задаче" msgid "no such appointment" msgstr "задача отÑутÑтвует" msgid "" "Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" " [-c] [-D] [-S] [--status]\n" " [--read-only]\n" msgstr "" "Команда: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" " [-c | -D] [-S] [--status]\n" " [--read-only]\n" msgid "Try 'calcurse -h' for more information.\n" msgstr "Выполните 'calcurse -h' Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñправки.\n" #, fuzzy msgid "" "\n" "Copyright (c) 2004-2015 calcurse Development Team.\n" "This is free software; see the source for copying conditions.\n" msgstr "" "\n" "Copyright (c) 2004-2013 calcurse Development Team.\n" "This is free software; see the source for copying conditions.\n" #, c-format msgid "Calcurse %s - text-based organizer\n" msgstr "Calcurse %s - текÑтовый органайзер\n" msgid "" "\n" "For more information, type '?' from within Calcurse, or read the manpage.\n" msgstr "" "\n" "Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñправки, нажмите '?' в Calcurse или Ñмотрите man-Ñтраницу.\n" msgid "Mail feature requests and suggestions to .\n" msgstr "Ðайденные ошибки или ваши идеи, приÑылайте на .\n" msgid "Mail bug reports to .\n" msgstr "Ðайденные ошибки выÑылайте на .\n" msgid "" "\n" "Miscellaneous:\n" " -h, --help\n" "\tprint this help and exit.\n" "\n" " -v, --version\n" "\tprint calcurse version and exit.\n" "\n" " --status\n" "\tdisplay the status of running instances of calcurse.\n" "\n" " --read-only\n" "\tDon't save configuration nor appointments/todos. Use with care.\n" "\n" "Files:\n" " -c , --calendar \n" "\tspecify the calendar to use (has precedence over '-D').\n" "\n" " -D , --directory \n" "\tspecify the data directory to use.\n" "\tIf not specified, the default directory is ~/.calcurse\n" "\n" "Non-interactive:\n" " -a, --appointment\n" " \tprint events and appointments for current day and exit.\n" "\n" " -d , --day \n" "\tprint events and appointments for or upcoming days and\n" "\texit. To specify both a starting date and a range, use the\n" "\t'--startday' and the '--range' option.\n" "\n" " -g, --gc\n" "\trun the garbage collector for note files and exit. \n" "\n" " -i , --import \n" "\timport the icalendar data contained in . \n" "\n" " -n, --next\n" "\tprint next appointment within upcoming 24 hours and exit. Also given\n" "\tis the remaining time before this next appointment.\n" "\n" " -l , --limit \n" "\tonly print information regarding the next items. \n" "\n" " -r[num], --range[=num]\n" "\tprint events and appointments for the [num] number of days\n" "\tand exit. If no [num] is given, a range of 1 day is considered.\n" "\n" " -s[date], --startday[=date]\n" "\tprint events and appointments from [date] and exit.\n" "\tIf no [date] is given, the current day is considered.\n" "\n" " -S, --search=\n" "\tsearch for the given regular expression within events, appointments,\n" "\tand todos description.\n" "\n" " -t[num], --todo[=num]\n" "\tprint todo list and exit. If the optional number [num] is given,\n" "\tthen only todos having a priority equal to [num] will be returned.\n" "\tThe priority number must be between 1 (highest) and 9 (lowest).\n" "\tIt is also possible to specify '0' for the priority, in which case\n" "\tonly completed tasks will be shown.\n" "\n" " -x[format], --export[=format]\n" "\texport user data to the specified format. Events, appointments and\n" "\ttodos are converted and echoed to stdout.\n" "\tTwo possible formats are available: 'ical' and 'pcal'.\n" "\tIf the optional argument format is not given, ical format is\n" "\tselected by default.\n" "\tnote: redirect standard output to export data to a file,\n" "\tby issuing a command such as: calcurse --export > calcurse.dat\n" msgstr "" "\n" "Разное: \n" "-h, --help\n" "показать Ñправку. \n" "\n" "-v, --version\n" "показать верÑию calcurse. \n" "\n" "--status\n" "показать ÑÑ‚Ð°Ñ‚ÑƒÑ calcurse.\n" "\n" "--read-only\n" "Ðе Ñохр. наÑтройки, задачи и дела (будьте внимательны).\n" "\n" "Файлы:\n" "-c , --calendar иÑпользование файла ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ " "(приоритетен перед ключом '-D').\n" "\n" "-D , --directory иÑпользование конкретной директории. Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ " "по-умолчанию ~/.calcurse\n" "\n" "Ðе интерактивные:\n" "-a, --appointment\n" "показать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ задачи на текущий день.\n" "\n" "-d , --day \n" "показать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ задачи на дату или на кол-во грÑдущих дней. " "Ð”Ð»Ñ Ð¾Ð´Ð½Ð¾Ð²Ñ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð³Ð¾ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ '--startday' и '--range'.\n" "\n" "-g, --gc\n" "запуÑтить Ñборщик муÑора Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² заметок.\n" "\n" "-i , --import \n" "импортировать данные icalendar в файл .\n" "\n" "-l , --limit \n" "выводит информацию о Ñледующих значениÑÑ….\n" "\n" "-n, --next\n" "показать Ñлед. задачу и Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾ неё в пределах 24 чаÑов.\n" "\n" "-r[num], --range[=num]\n" "показать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ задачи на [num] дней. По-умолчанию значение [num] равно " "одному дню.\n" "\n" "-s[date], --startday[=date]\n" "показать ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ задачи на указанную дату [date]. По-умолчанию значение " "[date] равно текущему дню.\n" "\n" "-S, --search=\n" "поиÑк регулÑрных выражений внутри опиÑÐ°Ð½Ð¸Ñ Ñобытий, задач и дел.\n" "\n" "-t[num], --todo[=num]\n" "показать ÑпиÑок дел. ЕÑли задано [num], будут показаны дела, имеющие " "приоритет равный значению [num]. Значение приоритета находитÑÑ Ð¼ÐµÐ¶Ð´Ñƒ 1 " "(выÑокий) и 9 (низкий). УÑтановка Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð²Ð½Ð¾Ð³Ð¾ '0', покажет только " "завершённые дела.\n" "\n" "-x[format], --export[=format]\n" "ÑкÑпорт данных Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² файл. СобытиÑ, задачи и дела будут " "конвертированы, а пользователь уведомлён об Ñтом. СущеÑтвуют два формата Ð´Ð»Ñ " "ÑкÑпорта: 'ical' and 'pcal'. Форматом по-умолчанию ÑвлÑетÑÑ ical. \n" "Примечание: перенаправление потока ÑкÑпорта данных в файл, возможно Ñлед. " "образом: calcurse --export > calcurse.dat\n" "\n" #, c-format msgid "" "Error: both calcurse (pid: %d) and its daemon (pid: %d)\n" "seem to be running at the same time!\n" "Please check manually and restart calcurse.\n" msgstr "" "Ошибка: calcurse (pid: %d) и его демон (pid: %d)\n" "запущены одновременно!\n" "ПожалуйÑта, проверьте Ñто и перезапуÑтите calcurse.\n" #, c-format msgid "calcurse is running (pid %d)\n" msgstr "calcurse запущен (pid: %d)\n" #, c-format msgid "calcurse is running in background (pid %d)\n" msgstr "calcurse запущен в фоновом режиме (pid: %d)\n" msgid "calcurse is not running\n" msgstr "calcurse не запущен\n" msgid "completed tasks:\n" msgstr "Выполненные задачи:\n" msgid "to do:\n" msgstr "СпиÑок дел:\n" msgid "next appointment:\n" msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð·Ð°Ð´Ð°Ñ‡Ð°:\n" #, fuzzy, c-format msgid "invalid date: %s" msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ°" #, c-format msgid "invalid range: %s" msgstr "" #, c-format msgid "invalid priority: %s" msgstr "" #, c-format msgid "invalid export format: %s" msgstr "" msgid "invalid filter mask" msgstr "" #, fuzzy msgid "cannot handle more than one regular expression" msgstr "Ðевозможно обработать более одного регулÑрного выражениÑ." #, fuzzy, c-format msgid "could not compile regular expression: %s" msgstr "Ðевозможно Ñкомпилировать регулÑрное выражение." #, c-format msgid "invalid date range: %s" msgstr "" msgid "invalid argument combination" msgstr "" msgid "cannot specify a range and an end date" msgstr "" msgid "Export to (i)cal or (p)cal format?" msgstr "Формат ÑкÑпорта (i)cal или (p)cal?" msgid "[ip]" msgstr "[ip]" msgid "Do you really want to quit?" msgstr "Ð’Ñ‹ уверены, что хотите выйти?" msgid "Command:" msgstr "Команда:" #, c-format msgid "Help topic does not exist: %s" msgstr "Раздел Ñправки не ÑущеÑтвует: %s" #, c-format msgid "No such command: %s" msgstr "Команда не обнаружено: %s" msgid "unknown color" msgstr "неизвеÑтный цвет" msgid "failed to open configuration file" msgstr "ошибка Ð¾Ñ‚Ñ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° конфигурации" #, c-format msgid "invalid configuration directive: \"%s\"" msgstr "invalid configuration directive: \"%s\"" msgid "" "Pre-3.0.0 configuration file format detected, please upgrade running " "`calcurse-upgrade`." msgstr "" "Обнаружен конфгурационный файл верÑии ниже 3.0.0. Обновите, пожалуйÑта, " "запуÑтив `calcurse-upgrade`." #, c-format msgid "configuration variable unknown: \"%s\"" msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð½Ð°Ñтройка переменной: \"%s\"" #, c-format msgid "wrong configuration variable format for \"%s\"" msgstr "неверный формат переменной конфигурации Ð´Ð»Ñ \"%s\"" msgid "layout configuration" msgstr "ÐаÑтройки раÑположениÑ" msgid "Foreground" msgstr "Передний фон" msgid "Background" msgstr "Задний фон" msgid "(terminal's default)" msgstr "(цвета терминала)" msgid "color theme" msgstr "Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ Ñхема" msgid "(if set to YES, compact panels are used)" msgstr "" msgid "Calendar" msgstr "Календарь" msgid "Appointments" msgstr "Задачи" msgid "TODO" msgstr "Дело" msgid "(specifies the panel that is selected by default)" msgstr "" msgid "(if set to YES, automatic save is done when quitting)" msgstr "(yes/no) ÐвтоÑохранение при выходе из программы" msgid "(run the garbage collector when quitting)" msgstr "(yes/no) запуÑтить Ñборщик муÑора при выходе" msgid "(if not null, automatically save data every 'periodic_save' minutes)" msgstr "(N/0) ÐвтоÑохранение каждые N минут. (Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ '0')" msgid "(if set to YES, confirmation is required before quitting)" msgstr "(yes/no) Подтверждение выхода из программы" msgid "(if set to YES, confirmation is required before deleting an event)" msgstr "(yes/no) Подтверждение ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ñобытий" msgid "(if set to YES, messages about loaded and saved data will be displayed)" msgstr "(yes/no) Отображение ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ загрузке и Ñохранении данных" msgid "(if set to YES, progress bar will be displayed when saving data)" msgstr "(yes/no) Отображение полоÑÑ‹ загрузки ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…" msgid "Monday" msgstr "Пн" msgid "Sunday" msgstr "Ð’Ñ" msgid "(specifies the first day of week in the calendar view)" msgstr "(указание первого Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ в календаре)" msgid "(Format of the date to be displayed in non-interactive mode)" msgstr "Формат даты отображаетÑÑ Ð² неинтерактивном режиме" msgid "(Format to be used when entering a date: " msgstr "Формат Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° даты: " msgid "Enter an option number to change its value" msgstr "Введите номер наÑтройки Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐµÑ‘ параметра" msgid "(Press '^P' or '^N' to move up or down, 'Q' to quit)" msgstr "'^P' или '^N' - вверх/вниз, 'Q' - выхода" msgid "Enter the date format (see 'man 3 strftime' for possible formats) " msgstr "Задайте формат даты (Ñм. 'man 3 strftime' Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… форматов)" msgid "Enter the date format: " msgstr "Задайте формат даты: " msgid "Enter the delay, in minutes, between automatic saves (0 to disable) " msgstr "Введите задержку между автоÑохранениÑми (в минутах) или 0 Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ " msgid "general options" msgstr "ОÑновные наÑтройки" msgid "Undefined option!" msgstr "ÐÐµÐ¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ Ð½Ð°Ñтройка!" msgid "undefined" msgstr "неопределено" msgid "keys configuration" msgstr "ÐаÑтройка клавиш" msgid "Press the key you want to assign to:" msgstr "Ðажмите клавишу, чтобы привÑзать её к:" msgid "This key is not yet recognized by calcurse, please choose another one." msgstr "Эта клавиша ещё не раÑпознаётÑÑ calcurse, попробуйте другую." #, c-format msgid "This key is already in use for %s, please choose another one." msgstr "Эта клавиша уже иÑпользуетÑÑ Ð´Ð»Ñ %s, попробуйте другую." msgid "Some actions do not have any associated key bindings!" msgstr "Ðекоторые дейÑÑ‚Ð²Ð¸Ñ Ð½Ðµ привÑзаны к клавишам!" msgid "" "Sorry, colors are not supported by your terminal\n" "(Press [ENTER] to continue)" msgstr "Цвета не поддерживаютÑÑ Ð²Ð°ÑˆÐ¸Ð¼ терминалом (Ðажмите [ENTER])" msgid "unknown item type" msgstr "неизвеÑтный тип запиÑи" msgid "Event:" msgstr "Событие:" msgid "Appointment:" msgstr "Задача:" #, c-format msgid "Could not stop daemon properly: %s\n" msgstr "Ðевозможно оÑтановить демон должным образом: %s\n" #, c-format msgid "terminated at %s with signal %d\n" msgstr "завершено %s Ñ Ñигналом %d\n" #, c-format msgid "Could not remove daemon lock file: %s\n" msgstr "Ðевозможно удалить демон: %s\n" #, c-format msgid "Could not fork: %s\n" msgstr "Ðевозможно разделить: %s\n" #, c-format msgid "Could not detach from the controlling terminal: %s\n" msgstr "Ðевозможно прервать Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñющего терминала: %s\n" #, c-format msgid "Could not change working directory: %s\n" msgstr "Ðевозможно выбрать рабочую директориюг: %s\n" msgid "Cannot daemonize, aborting\n" msgstr "Ðевозможно демонизировать процеÑÑ. Завершение\n" msgid "Could not set lock file\n" msgstr "Ðевозможно выбрать заблокированный файл\n" #, c-format msgid "Could not access \"%s\": %s\n" msgstr "Ðет доÑтупа \"%s\": %s\n" #, c-format msgid "started at %s\n" msgstr "запуÑк в %s\n" msgid "error loading next appointment\n" msgstr "ошибка при загрузке Ñледующей задачи\n" #, c-format msgid "launching notification at %s for: \"%s\"\n" msgstr "запуÑк ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ %s длÑ: \"%s\"\n" msgid "error while sending notification\n" msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ уведомлениÑ\n" #, c-format msgid "sleeping at %s for %d second\n" msgid_plural "sleeping at %s for %d seconds\n" msgstr[0] "ÑпÑщий режим %s на %d Ñек.\n" msgstr[1] "ÑпÑщий режим %s на %d Ñек.\n" msgstr[2] "ÑпÑщий режим %s на %d Ñек.\n" #, c-format msgid "awakened at %s\n" msgstr "пробуждение %s\n" #, c-format msgid "Could not stop calcurse daemon: %s\n" msgstr "Ðевозможно оÑтановить демон calcurse: %s\n" msgid "date error in event" msgstr "ошибка даты в Ñобытии" msgid "date error in the event\n" msgstr "ошибка даты в Ñобытии\n" msgid "Internal error: line too long" msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: Ñлишком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ Ñтрока" msgid "out of memory" msgstr "нехватка памÑти" msgid "unknown ical type" msgstr "неизвеÑтный тип ical" msgid "recurrence frequence not found." msgstr "чаÑтота повторений не найдена." msgid "recurrence frequence not recognized." msgstr "чаÑтота повторений не раÑпознана." msgid "recurrence rule malformed." msgstr "рекурентные правила повреждены." msgid "recurrence exception dates malformed." msgstr "рекурентные ÑÐ¾Ð¾Ñ‚Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ Ð´Ð°Ñ‚ повреждены." msgid "could not get entire item description." msgstr "невозможно получить опиÑание полноÑтью." msgid "description malformed." msgstr "опиÑание повреждено." msgid "appointment has no start time." msgstr "задача не имеет начального времени." msgid "could not compute duration (no end time)." msgstr "невозможно вычиÑлить продолжительноÑть (нет времени окончаниÑ)." msgid "item has a negative duration." msgstr "значение имеет отрицательную продолжительноÑть." msgid "event date is not defined." msgstr "дата ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ определена." msgid "item could not be identified." msgstr "значение не может быть раÑпознано." msgid "could not retrieve item summary." msgstr "невозможно воÑÑтановить Ñуммарные запиÑи." msgid "could not retrieve event start time." msgstr "невозможно воÑÑтановить Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° ÑобытиÑ." msgid "could not retrieve event end time." msgstr "невозможно воÑÑтановить Ð²Ñ€ÐµÐ¼Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ ÑобытиÑ." msgid "item duration malformed." msgstr "значение продолжительноÑти повреждено." msgid "The ical file seems to be malformed. The end of item was not found." msgstr "Файл ical Ñкорее вÑего повреждён. Ðе найдено окончание запиÑи." msgid "item priority is not acceptable (must be between 1 and 9)." msgstr "Значение приоритета должно быть между 1 и 9." msgid "Warning: ical header malformed or wrong version number. Aborting..." msgstr "" "Внимание: заголовок ical повреждён или неправильный номер верÑии. " "Завершение..." msgid "Saving..." msgstr "Сохранение..." msgid "Loading..." msgstr "Загрузка..." msgid "Exporting..." msgstr "ЭкÑпорт..." msgid "Internal error while displaying progress bar" msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° полоÑÑ‹ загрузки" msgid "Choose the file used to export calcurse data:" msgstr "Выберите файл Ð´Ð»Ñ ÑкÑпорта данных:" msgid "The file cannot be accessed, please enter another file name." msgstr "Файл не может быть добавлен, попробуйте другое Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°." msgid "Press [ENTER] to continue." msgstr "Ðажмите [ENTER]." #, c-format msgid "Failed to open \"%s\", - %s\n" msgstr "Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ \"%s\", - %s\n" msgid "Failed to build message\n" msgstr "Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑообщениÑ\n" #, c-format msgid "Failed to print message \"%s\"\n" msgstr "Ошибка вывода ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ \"%s\"\n" #, c-format msgid "Failed to close \"%s\" - %s\n" msgstr "Ошибка Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ \"%s\" - %s\n" #, fuzzy, c-format msgid "%s does not exist" msgstr "Раздел Ñправки не ÑущеÑтвует: %s" msgid "Problems accessing data file ..." msgstr "Проблемы Ñ Ð´Ð¾Ñтупом к файлу данных..." msgid "The data files were successfully saved" msgstr "Файл данных уÑпешно Ñохранён" msgid "Press [ENTER] to continue" msgstr "Ðажмите [ENTER]" msgid "failed to open appointment file" msgstr "ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° задач" msgid "syntax error in the item date" msgstr "опечатка в запиÑе даты" msgid "no event nor appointment found" msgstr "ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ задачи не найдены" msgid "syntax error in item time or duration" msgstr "опечатка в запиÑи даты или продолжительноÑти" msgid "syntax error in item identifier" msgstr "опечатка в запиÑи опознавателÑ" msgid "wrong format in the appointment or event" msgstr "неверный формат ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸Ð»Ð¸ задачи" msgid "syntax error in item repetition" msgstr "опечатка в запиÑи повторениÑ" msgid "failed to open todo file" msgstr "ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ todo-файла" msgid "The data files were reloaded successfully" msgstr "Файлы данных полноÑтью обновлены" msgid "There are unsaved modifications:" msgstr "Ðе Ñохранённые изменениÑ:" msgid "(d)iscard" msgstr "(d)отменить" msgid "(m)erge" msgstr "(m)ÑлиÑние" msgid "(k)eep and cancel" msgstr "" msgid "[dmk]" msgstr "[dmk]" msgid "failed to open key file" msgstr "ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° ключа" msgid "" "\n" "Too many errors while reading configuration file!\n" "Please backup your keys file, remove it from directory, and launch calcurse " "again.\n" msgstr "" "\n" "Обнаружены ошибки при чтении файла наÑтроек!\n" "Сделайте копию keys-файла, удалите его из каталога и запуÑтите calcurse " "Ñнова.\n" msgid "Could not read key label" msgstr "Ðевозможно раÑпознать клавишу" msgid "Key label not recognized" msgstr "Клавиша не опознана" #, c-format msgid "Error reading key: \"%s\"" msgstr "Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸: \"%s\"" #, c-format msgid "\"%s\" assigned multiple times!" msgstr "\"%s\" определено множеÑтво времён!" msgid "There were some errors when loading keys file, see log file?" msgstr "Возникли ошибки при загрузке keys-файла. Смотреть log-файл?" msgid "Too many errors while reading keys file, aborting..." msgstr "Обнаружены ошибки при чтении keys-файла, отмена..." #, c-format msgid "FATAL ERROR: could not create %s: %s\n" msgstr "ФÐТÐЛЬÐÐЯ ОШИБКÐ: невозможно Ñоздать %s: %s\n" msgid "Welcome to Calcurse. Missing data files were created." msgstr "Добро пожаловать в Calcurse. ОтÑутÑтвующие файлы данных будут Ñозданы." msgid "Data files found. Data will be loaded now." msgstr "Данные найдены и будут загружены" msgid "The data were successfully exported" msgstr "Данные уÑпешно ÑкÑпортированы" msgid "unknown export type" msgstr "неизвеÑтный тип ÑкÑпорта" msgid "wrong export mode" msgstr "ошибочный режим ÑкÑпорта" msgid "Enter the file name to import data from:" msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°: " #, c-format msgid "Import process report: %04d lines read" msgstr "Отчёт процеÑÑа импорта:%04d lines read" msgid "unknown import type" msgstr "неизвеÑтный тип импорта" msgid "FATAL ERROR: the input file cannot be accessed, Aborting..." msgstr "ФÐТÐЛЬÐÐЯ ОШИБКÐ: входÑщий файл не может быть добавлен. Завершение..." msgid "FATAL ERROR: wrong import mode" msgstr "ФÐТÐЛЬÐÐЯ ОШИБКÐ: неправильный режим импорта" #, c-format msgid "%d app" msgid_plural "%d apps" msgstr[0] "%d app" msgstr[1] "%d apps" msgstr[2] "%d apps" #, c-format msgid "%d event" msgid_plural "%d events" msgstr[0] "%d Ñобытие" msgstr[1] "%d ÑобытиÑ" msgstr[2] "%d ÑобытиÑ" #, c-format msgid "%d todo" msgid_plural "%d todos" msgstr[0] "%d дело" msgstr[1] "%d дела" msgstr[2] "%d дела" #, c-format msgid "%d skipped" msgstr "%d пропущен" msgid "Some items could not be imported, see log file?" msgstr "Ðекоторые запиÑи не были импортированы. Открыть log-файл?" msgid "Warning: could not open temporary log file, Aborting..." msgstr "Внимание: невозможно открыть временный log-файл. Завершение..." msgid "Warning: could not create temporary log file, Aborting..." msgstr "Внимание: невозможно Ñоздать временный log-файл. Завершение..." msgid "No log file to display!" msgstr "Ðет log-файла Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ!" #, c-format msgid "Warning: could not erase temporary log file %s, Aborting..." msgstr "Внимание: невозможно очиÑтить временный log-файл %s. Завершение..." msgid "Invalid delay" msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ°" #, c-format msgid "" "\n" "WARNING: it seems that another calcurse instance is already running.\n" "If this is not the case, please remove the following lock file: \n" "\"%s\"\n" "and restart calcurse.\n" msgstr "" "\n" "Ð’ÐИМÐÐИЕ: calcurse уже запущен.\n" "ЕÑли Ñто не так, удалите заблокированный файл: \n" "\"%s\"\n" "и перезапуÑтите calcurse.\n" msgid "Cancel" msgstr "Отменить" msgid "Select" msgstr "Выбрать" msgid "Credits" msgstr "Ðвторы" msgid "Help" msgstr "Справка" msgid "Quit" msgstr "Выход" msgid "Save" msgstr "Сохр." msgid "Reload" msgstr "Обновить" msgid "Copy" msgstr "Копир." msgid "Paste" msgstr "Ð’Ñтавить" msgid "Chg Win" msgstr "Панель" msgid "Import" msgstr "Импорт" msgid "Export" msgstr "ЭкÑпорт" msgid "Go to" msgstr "Переход" msgid "OtherCmd" msgstr "..." msgid "Config" msgstr "ÐаÑтройки" msgid "Redraw" msgstr "Обновить" msgid "Add Appt" msgstr "Доб.Задачу" msgid "Add Todo" msgstr "Доб.Дело" msgid "-1 Day" msgstr "День -" msgid "+1 Day" msgstr "День +" msgid "-1 Week" msgstr "ÐÐµÐ´ÐµÐ»Ñ -" msgid "+1 Week" msgstr "ÐÐµÐ´ÐµÐ»Ñ +" msgid "-1 Month" msgstr "МеÑÑц -" msgid "+1 Month" msgstr "МеÑÑц +" msgid "-1 Year" msgstr "Год -" msgid "+1 Year" msgstr "Год +" msgid "Nxt View" msgstr "След." msgid "Prv View" msgstr "Пред." msgid "Today" msgstr "СегоднÑ" msgid "Command" msgstr "Команда:" msgid "Right" msgstr "Вправо" msgid "Left" msgstr "Влево" msgid "Down" msgstr "Вниз" msgid "Up" msgstr "Вверх" msgid "beg Week" msgstr "Ðач.недели" msgid "end Week" msgstr "Кон.недели" msgid "Add Item" msgstr "Доб.ЗапиÑÑŒ" msgid "Del Item" msgstr "Уд.ЗапиÑÑŒ" msgid "Edit Itm" msgstr "Изм.ЗапиÑÑŒ" msgid "View" msgstr "Смотреть" msgid "Pipe" msgstr "Программный канал (pipe)" msgid "Flag Itm" msgstr "Флаг" msgid "Repeat" msgstr "Повтор" msgid "EditNote" msgstr "Изм.Заметку" msgid "ViewNote" msgstr "См.Заметку" msgid "Prio.+" msgstr "Приор. +" msgid "Prio.-" msgstr "Приор. -" msgid "" "#\n" "# Calcurse keys configuration file\n" "#\n" "# This file sets the keybindings used by Calcurse.\n" "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n" "# To assign a keybinding to an action, this file must contain a line\n" "# with the following syntax:\n" "#\n" "# ACTION KEY1 KEY2 ... KEYn\n" "#\n" "# Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn\n" "# will be pressed.\n" "#\n" "# To define bindings which use the CONTROL key, prefix the key with 'C-'.\n" "# The escape, space bar and horizontal Tab key can be specified using\n" "# the 'ESC', 'SPC' and 'TAB' keyword, respectively.\n" "# Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords.\n" "# Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END'\n" "# keywords.\n" "#\n" "# A description of what each ACTION keyword is used for is available\n" "# from calcurse online configuration menu.\n" msgstr "" "#\n" "#Конфигурационный файл горÑчих клавиш calcurse\n" "#\n" "#Файл задаёт привÑзку дейÑтвий к клавишам Calcurse.\n" "#Линии, начинающиеÑÑ Ñ \"#\", еÑть комментарии и игнорируютÑÑ Calcurse.\n" "#Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð²Ñзки горÑчей клавиши к дейÑтвию, в файл необходимо напиÑать " "Ñтроку,\n" "#иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñледующий ÑинтакÑиÑ:\n" "#\n" "#\tДЕЙСТВИЕ КЛÐÐ’.1 КЛÐÐ’.2 ... КЛÐÐ’.N\n" "#\n" "#Где ДЕЙСТВИЕ - Ñто ЧТО должно проиÑходить при нажатии на клавиши КЛÐÐ’.1, \n" "# ..., или КЛÐÐ’.N\n" "#\n" "#Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑвÑзки Ctrl + \"горÑÑ‡Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ°\", иÑпользуйте Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ " "'C-'.\n" "#Escape, пробел, клавиша табулÑции - обозначаютÑÑ 'ESC', 'SPC' и 'TAB'\n" "#ÑоответÑтвенно.\n" "#Клавиши Ñтрелок обозначаютÑÑ ÐºÐ°Ðº UP, DWN, LFT, RGT.\n" "#ПоÑледнее, клавиши Home и End имеют обозначение 'KEY_HOME'\n" "#и 'KEY_END'.\n" "#\n" "#ОпиÑание каждой иÑпользуемой клавиши ДЕЙСТВИЕ доÑтупно\n" "#из меню наÑтроек calcurse\n" msgid "FATAL ERROR: could not create default keys file." msgstr "FATAL ERROR: could not create default keys file." msgid "FATAL ERROR: key value out of bounds" msgstr "FATAL ERROR: key value out of bounds" msgid "General" msgstr "ОÑновные" msgid "Layout" msgstr "РаÑполож." msgid "Sidebar" msgstr "Обрамление" msgid "Color" msgstr "Цвета" msgid "Notify" msgstr "Уведомление" msgid "Keys" msgstr "Клавиши" msgid "Unknown" msgstr "ÐезвеÑтный(аÑ)" msgid "Cancel the ongoing action." msgstr "Отмена поÑтоÑнного дейÑтвиÑ." msgid "Select the highlighted item." msgstr "Выбрать подÑвеченную запиÑÑŒ." msgid "Print general information about calcurse's authors, license, etc." msgstr "ПроÑмотреть оÑновную информацию об авторах, лицензии и Ñ‚.п." msgid "Display hints whenever some help screens are available." msgstr "Показать Ñправку, еÑли Ñ‚Ð°ÐºÐ¾Ð²Ð°Ñ Ð¸Ð¼ÐµÐµÑ‚ÑÑ." msgid "Exit from the current menu, or quit calcurse." msgstr "Выйти из текущего меню или из calcurse" msgid "Save calcurse data." msgstr "Сохр. данные calcurse" msgid "Reload appointments and todo items." msgstr "Обновить задачу и ÑпиÑок дел." msgid "Copy the item that is currently selected." msgstr "Копировать выделенную запиÑÑŒ (пункт?)" msgid "Paste an item at the current position." msgstr "Ð’Ñтавить запиÑÑŒ в текущую позицию" msgid "Select next panel in calcurse main screen." msgstr "Выбрать Ñлед. панель на главном Ñкране calcurse" msgid "Import data from an external file." msgstr "Импортированть данные Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ файла." msgid "Export data to a new file format." msgstr "ЭкÑпортировать данные в файл." msgid "Select the day to go to." msgstr "Выбрать день Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° на него." msgid "Show next possible actions inside status bar." msgstr "Отобразить в полоÑе ÑтатуÑа ещё одни возможные дейÑтвиÑ. " msgid "Enter the configuration menu." msgstr "Войти в меню наÑтроек." msgid "Redraw calcurse's screen." msgstr "Обновить Ñкран calcurse" msgid "Add an appointment, whichever panel is currently selected." msgstr "Добавить Задачу. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ." msgid "Add a todo item, whichever panel is currently selected." msgstr "Добавить Дело. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ." msgid "" "Move to previous day in calendar, whichever panel is currently selected." msgstr "Предыдущий день календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ." msgid "Move to next day in calendar, whichever panel is currently selected." msgstr "Следующий день календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ." msgid "" "Move to previous week in calendar, whichever panel is currently selected" msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð½ÐµÐ´ÐµÐ»Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ." msgid "Move to next week in calendar, whichever panel is currently selected." msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð½ÐµÐ´ÐµÐ»Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ." msgid "" "Move to previous month in calendar, whichever panel is currently selected" msgstr "Предыдущий меÑÑц календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ." msgid "Move to next month in calendar, whichever panel is currently selected." msgstr "Следующий меÑÑц календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ." msgid "" "Move to previous year in calendar, whichever panel is currently selected" msgstr "Предыдущий год календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ." msgid "Move to next year in calendar, whichever panel is currently selected." msgstr "Следующий год календарÑ. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ." msgid "Scroll window down (e.g. when displaying text inside a popup window)." msgstr "Прокрутить окно вниз (прим.: показ текÑта внутри вÑплыв. окна)." msgid "Scroll window up (e.g. when displaying text inside a popup window)." msgstr "Прокрутить окно вверх (прим.: показ текÑта внутри вÑплыв. окна)." msgid "Go to today, whichever panel is selected." msgstr "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð´Ð°Ñ‚Ð°. Может быть выбрана Ð»ÑŽÐ±Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ." msgid "Enter command mode." msgstr "Введите командный режим." msgid "Move to the right." msgstr "Вправо" msgid "Move to the left." msgstr "Влево" msgid "Move down." msgstr "Вниз" msgid "Move up." msgstr "Вверх" msgid "" "Select the first day of the current week when inside the calendar panel." msgstr "Выбрать первый день текущей недели внутри панели календарÑ." msgid "Select the last day of the current week when inside the calendar panel." msgstr "Выбрать поÑледний день текущей недели внутри панели календарÑ." msgid "Add an item to the currently selected panel." msgstr "Добавить запиÑÑŒ в выбранную панель." msgid "Delete the currently selected item." msgstr "Удалить выбранную запиÑÑŒ." msgid "Edit the currently seleted item." msgstr "Изменить выбранную запиÑÑŒ." msgid "Display the currently selected item inside a popup window." msgstr "ПроÑмотреть выбранную запиÑÑŒ во вÑплывающем окне." msgid "Flag the currently selected item as important." msgstr "Пометить выбранную запиÑÑŒ как важную." msgid "Repeat an item" msgstr "Повторить запиÑÑŒ" msgid "Pipe the currently selected item to an external program." msgstr "" "Открыть программный канал (pipe) выбранной запиÑи Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ¹ программой." msgid "Attach (or edit if one exists) a note to the currently selected item" msgstr "" "ПривÑзать (или задать, еÑли не ÑущеÑтвует) заметку Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð¹ запиÑи" msgid "View the note attached to the currently selected item." msgstr "ПроÑмотр вложенной запиÑки." msgid "Raise a task priority inside the todo panel." msgstr "ПовыÑить приоритет дела внутри панели дел." msgid "Lower a task priority inside the todo panel." msgstr "Понизить приоритет дела внутри ÑпиÑка дел." msgid "FATAL ERROR: null file pointer." msgstr "FATAL ERROR: null file pointer." #, c-format msgid "When adding default key for \"%s\", \"%s\" was already assigned!" msgstr "При назначении клав. \"%s\", \"%s\" уже была назначена!" msgid "xmalloc: zero size" msgstr "xmalloc: zero size" msgid "xmalloc: out of memory" msgstr "xmalloc: out of memory" msgid "xcalloc: zero size" msgstr "xcalloc: zero size" msgid "xcalloc: overflow" msgstr "xcalloc: overflow" msgid "xcalloc: out of memory" msgstr "xcalloc: out of memory" msgid "xrealloc: zero size" msgstr "xrealloc: zero size" msgid "xrealloc: overflow" msgstr "xrealloc: overflow" msgid "xrealloc: out of memory" msgstr "xrealloc: out of memory" msgid "could not allocate memory to store block info" msgstr "could not allocate memory to store block info" msgid "Block not found" msgstr "Block not found" #, c-format msgid "overflow at %s" msgstr "overflow at %s" #, c-format msgid "dbg_free: null pointer at %s" msgstr "dbg_free: null pointer at %s" #, c-format msgid "block seems already freed at %s" msgstr "block seems already freed at %s" #, c-format msgid "corrupt block header at %s" msgstr "corrupt block header at %s" #, c-format msgid "corrupt block end at %s, (end = %u, should be %d)" msgstr "corrupt block end at %s, (end = %u, should be %d)" msgid "---==== MEMORY BLOCK ====----------------\n" msgstr "---==== MEMORY BLOCK ====----------------\n" #, c-format msgid " id: %u\n" msgstr " id: %u\n" #, c-format msgid " size: %u\n" msgstr " size: %u\n" #, c-format msgid " allocated in: %s\n" msgstr " allocated in: %s\n" msgid "-----------------------------------------\n" msgstr "-----------------------------------------\n" msgid "+------------------------------+\n" msgstr "+------------------------------+\n" msgid "| calcurse memory usage report |\n" msgstr "| calcurse memory usage report |\n" #, c-format msgid " number of calls: %u\n" msgstr " number of calls: %u\n" #, c-format msgid " allocated blocks: %u\n" msgstr " allocated blocks: %u\n" #, c-format msgid " unfreed blocks: %u\n" msgstr " unfreed blocks: %u\n" #, c-format msgid "Warning: could not open %s, Aborting..." msgstr "Внимание: невозможно открыть %s, Завершение..." msgid "error while launching command: could not fork" msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿ÑƒÑка команды: невозможно разделитьÑÑ (fork)" msgid "error while launching command" msgstr "ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð¿ÑƒÑка команды" msgid "(if set to YES, notify-bar will be displayed)" msgstr "(ЕÑли выбрано yes, будет выводитÑÑ Ð¾ÐºÐ½Ð¾ уведомлениÑ)" msgid "(Format of the date to be displayed inside notify-bar)" msgstr "(Формат даты выводитÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ окна уведомлениÑ)" msgid "(Format of the time to be displayed inside notify-bar)" msgstr "(Формат времени выводитÑÑ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ окна уведомлениÑ)" msgid "" "(Warn user if an appointment is within next 'notify-bar_warning' seconds)" msgstr "(Предупреждать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¾ Ñобытии за 'notify-bar_warning' Ñекунд)" msgid "(Command used to notify user of an upcoming appointment)" msgstr "(Команда уведомлÑет Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¾ грÑдущем Ñобытии)" msgid "(Notify all appointments instead of flagged ones only)" msgstr "" "(Извещать обо вÑех задачах, вмеÑто тех, которые помечены Ð´Ð»Ñ Ð¸Ð·Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ)" msgid "(Run in background to get notifications after exiting)" msgstr "(ЗапуÑтить в фоновом режиме, Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñти получать уведомлениÑ)" msgid "(Log activity when running in background)" msgstr "(Лог активен во Ð²Ñ€ÐµÐ¼Ñ Ñ„Ð¾Ð½Ð¾Ð²Ð¾Ð³Ð¾ режима)" msgid "Enter the time format (see 'man 3 strftime' for possible formats) " msgstr "Задайте формат времени (Ñм. 'man 3 strftime' Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… форматов) " msgid "Enter the number of seconds (0 not to be warned before an appointment)" msgstr "Введите количеÑтво Ñекунд (0 - отмена Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð¾ ÑобытиÑ)" msgid "Enter the notification command " msgstr "Введите команду ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ " msgid "notification options" msgstr "наÑтройки уведомлениÑ" msgid "incoherent repetition type" msgstr "беÑÑвÑзный тип повторениÑ" msgid "unknown repetition type" msgstr "неизвеÑтный тип повторениÑ" msgid "unknown character" msgstr "неизвеÑтный Ñимвол" msgid "event not found" msgstr "Ñобытие не найдено" msgid "appointment not found" msgstr "задача не найдена" msgid "syntax error in item date" msgstr "опечатка в запиÑи даты" msgid "date error in item exception" msgstr "ошибка даты в значении" #, c-format msgid "Could not remove calcurse lock file: %s\n" msgstr "Ðевозможно удалить занÑтый файл: %s\n" #, c-format msgid "Error setting signal #%d : %s\n" msgstr "Сигнал ошибки наÑтройки #%d : %s\n" msgid "no note attached" msgstr "запиÑка отÑутÑтвует" msgid "no such todo" msgstr "дело не найдено" msgid "todo not found" msgstr "дело не найдено" msgid "ERROR setting first day of week" msgstr "ОШИБКРнаÑтройки первого Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸" #, fuzzy msgid "The day you entered is not valid" msgstr "Ðеверно введена чаÑтота повторениÑ." #, c-format msgid "Enter the day to go to [ENTER for today] : %s" msgstr "Переход на N-ый день [ENTER Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ днÑ] : %s" msgid "Enter start time ([hh:mm] or [hhmm]):" msgstr "Ðачало ([чч:мм] или [ччмм]): " msgid "Press [Enter] to continue" msgstr "Ðажмите [Enter]" msgid "You entered an invalid time, should be [hh:mm] or [hhmm]" msgstr "Ðеверно указано времÑ, должно быть [чч:мм] или [ччмм]" msgid "Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):" msgstr "Окончание ([чч:мм], [ччмм]) или задержка ([+чч:мм], [+Ñ…Ñ…Ñ…dÑ…Ñ…hÑ…Ñ…m]): " msgid "Invalid time: start time must be before end time!" msgstr "Ðеверное времÑ: Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° должно идти до времени конца" msgid "Enter the new item description:" msgstr "ОпиÑание: " msgid "Enter the new repetition type:" msgstr "Введите тип повторениÑ:" msgid "(d)aily" msgstr "(d)ежедневно" msgid "(w)eekly" msgstr "(w)еженедельно" msgid "(m)onthly" msgstr "(m)ежемеÑÑчно" msgid "(y)early" msgstr "(y)ежегодно" #, c-format msgid "(currently using %s)" msgstr "(иÑпользуетÑÑ %s)" msgid "[dwmy]" msgstr "[днмг]" msgid "The frequence you entered is not valid." msgstr "Ðеверно введена чаÑтота повторениÑ." msgid "The entered date is not valid." msgstr "Ðеверно введена дата." #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition." msgstr "[%s] или '0'- возможные форматы Ð´Ð»Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ." msgid "Enter the new repetition frequence:" msgstr "ÐÐ¾Ð²Ð°Ñ Ñ‡Ð°Ñтота повторениÑ:" #, c-format msgid "Enter the new ending date: [%s] or '0'" msgstr "ÐÐ¾Ð²Ð°Ñ Ð´Ð°Ñ‚Ð° окончаниÑ: [%s] или '0'" msgid "Description" msgstr "ОпиÑание" msgid "Repetition" msgstr "Повторение" msgid "Edit: " msgstr "Редактировать:" msgid "Start time" msgstr "Ðачальное времÑ" msgid "End time" msgstr "Конечное времÑ" msgid "Move" msgstr "Вперёд" msgid "Pipe item to external command:" msgstr "Программный канал (pipe) во внешнюю команду:" msgid "Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:" msgstr "" "Ðачало ([чч:мм] или [ччмм]). ОÑтавьте пуÑтым еÑли Ñобытие займёт веÑÑŒ день: " msgid "Enter description:" msgstr "ОпиÑание: " msgid "You entered an invalid start time, should be [hh:mm] or [hhmm]" msgstr "Ðеверно указано начальное времÑ, должно быть [чч:мм] или [ччмм]" msgid "" "Invalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], " "[+xxxdxxhxxm] or [+mm]" msgstr "" "Ðеверно указано конечное времÑ/задержка, должно быть [+чч:мм], [+хххДххЧххМ] " "или [+мм]" msgid "Do you really want to delete this item?" msgstr "Удалить?" msgid "This item is recurrent. Delete (a)ll occurences or just this (o)ne?" msgstr "" "Эта запиÑÑŒ имеет повторениÑ. Удалить (a)вÑе подобные запиÑи или только " "(o)Ñту ?" msgid "[ao]" msgstr "[ао]" msgid "This item has a note attached to it. Delete (i)tem or just its (n)ote?" msgstr "Эта запиÑÑŒ Ñодержит заметку. Удалить (i)запиÑÑŒ или только (n)заметку ?" msgid "[in]" msgstr "[в]" msgid "Enter the repetition type:" msgstr "Ðазначить тип повторениÑ:" msgid "Enter the repetition frequence:" msgstr "КоличеÑтво повторений: " #, c-format msgid "Enter the ending date: [%s] or '0' for an endless repetition" msgstr "ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ð´Ð°Ñ‚Ð°: [%s] или '0' Ð´Ð»Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ" #, c-format msgid "Possible formats are [%s] or '0' for an endless repetition" msgstr "Возможные форматы [%s] или '0' Ð´Ð»Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ" msgid "This item is already a repeated one." msgstr "Эта запиÑÑŒ уже повторÑетÑÑ." msgid "Sorry, the date you entered is older than the item start time." msgstr "Ð—Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° не ÑоответÑтвует времени начала запиÑи." msgid "wrong item type" msgstr "неправильный тип запиÑи" msgid "Enter the new TODO item:" msgstr "Дело: " msgid "Enter the TODO priority [1 (highest) - 9 (lowest)]:" msgstr "Приоритет дела [1 (выÑокий) - 9 (низкий)] :" msgid "Do you really want to delete this task?" msgstr "Удалить Ñту запиÑÑŒ?" msgid "This item has a note attached to it. Delete (t)odo or just its (n)ote?" msgstr "К делу прикреплена запиÑка. Удалить (t)дело или только (n)запиÑку ?" msgid "[tn]" msgstr "[tn]" msgid "Enter the new TODO description:" msgstr "ОпиÑание дела: " msgid "TODO:" msgstr "Дело:" msgid "/!\\ INTERNAL ERROR /!\\" msgstr "/!\\ INTERNAL ERROR /!\\" msgid "Please report the following bug:" msgstr "Сообщите об ошибке:" msgid "[yn]" msgstr "[yn]" msgid "Press any key to continue..." msgstr "Ðажмите любую клавишу..." msgid "failure in mktime" msgstr "ошибка в mktime" msgid "error in mktime" msgstr "ошибка в mktime" msgid "yes" msgstr "yes" msgid "no" msgstr "no" msgid "option not defined" msgstr "параметр не уÑтановлен" #, c-format msgid "temporary file \"%s\" could not be created" msgstr "временный файл \"%s\" не может быть Ñоздан" #, c-format msgid "Error when closing file at %s" msgstr "Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° %s" msgid "No note file found\n" msgstr "Файл Ñ Ð·Ð°Ð¼ÐµÑ‚ÐºÐ¾Ð¹ не найден\n" msgid "January" msgstr "Январь" msgid "February" msgstr "Февраль" msgid "March" msgstr "Март" msgid "April" msgstr "Ðпрель" msgid "May" msgstr "Май" msgid "June" msgstr "Июнь" msgid "July" msgstr "Июль" msgid "August" msgstr "ÐвгуÑÑ‚" msgid "September" msgstr "СентÑбрь" msgid "October" msgstr "ОктÑбрь" msgid "November" msgstr "ÐоÑбрь" msgid "December" msgstr "Декабрь" msgid "Sun" msgstr "Ð’Ñ" msgid "Mon" msgstr "Пн" msgid "Tue" msgstr "Ð’Ñ‚" msgid "Wed" msgstr "Ср" msgid "Thu" msgstr "Чт" msgid "Fri" msgstr "Пт" msgid "Sat" msgstr "Сб" msgid "mm/dd/yyyy" msgstr "мм/дд/гггг" msgid "dd/mm/yyyy" msgstr "дд/мм/гггг" msgid "yyyy/mm/dd" msgstr "гггг/мм/дд" msgid "yyyy-mm-dd" msgstr "гггг-мм-дд" msgid "unknown panel" msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ" msgid "Usage: calcurse-upgrade [-h|-v|--config ]" msgstr "ИÑпользовать: calcurse-upgrade [-h|-v|--config ]" msgid "unrecognized option:" msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ:" msgid "Configuration file not found:" msgstr "Файл конфигурации не найден:" msgid "Pre-3.0.0 configuration file format detected..." msgstr "Обнаружен файл конфигурации ниже верÑии 3.0.0..." msgid "Create temporary backup of the configuration file..." msgstr "Создать временную архивную копию файла конфигурации..." msgid "Old backup file found:" msgstr "Предыдущий файл архивной копии найден:" msgid "" "\n" "If a previous conversion did not complete, please try to restore your\n" "configuration from this backup and then remove the backup file." msgstr "" "\n" "ЕÑли Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ðµ завершилаÑÑŒ, воÑÑтановите вашу конфигурацию " "из Ñтого архивного файла, затем его удалив." msgid "done" msgstr "завершено" msgid "Old temporary file found:" msgstr "Обнаружен предыдущий файл временного Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñ‹Ñ…:" msgid "" "\n" "If a previous conversion did not complete, please try to remove this file " "and\n" "start over with a backup of your old configuration file." msgstr "" "\n" "ЕÑли Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ðµ завершилаÑÑŒ, удалите файл и попробуйте Ñнова, " "иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð°Ñ€Ñ…Ð¸Ð²Ð½Ñ‹Ð¹ файл Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ¹ конфигурацией." msgid "Upgrade configuration directives..." msgstr "Обновление конфигурации..." msgid "Remove temporary backup..." msgstr "Удалить временный архивный файл..." #~ msgid "Argument to the '-d' flag is not valid\n" #~ msgstr "Ðргумент ключа '-d' неверен\n" #~ msgid "Possible argument format are: '%s' or 'n'\n" #~ msgstr "Возможный формат аргумента: '%s' или 'n'\n" #~ msgid "Argument is not valid\n" #~ msgstr "Ðргумент неверен\n" #~ msgid "Argument format for -s and --startday is: '%s'\n" #~ msgstr "Формат аргумента Ð´Ð»Ñ -s и --startday: '%s'\n" #~ msgid "Argument format for -r and --range is: 'n'\n" #~ msgstr "Формат аргумента Ð´Ð»Ñ -r и --range: 'n'\n" #~ msgid "Argument for '-x' should be either 'ical' or 'pcal'\n" #~ msgstr "Ðргумент Ð´Ð»Ñ '-x': 'ical' либо 'pcal'\n" #~ msgid "" #~ "Option '-S' must be used with either '-d', '-r', '-s', '-a' or '-t'\n" #~ msgstr "" #~ "Ключ '-S' должен иÑпользоватьÑÑ Ñ Ð»ÑŽÐ±Ñ‹Ð¼ из Ñлед.: '-d'. '-r', '-s', '-a', " #~ "'-t'\n" #~ msgid "" #~ "Option '-l' must be used with either '-d', '-r', '-s', '-a' or '-t'\n" #~ msgstr "Ключ '-l' должен иÑпользоватьÑÑ Ñ '-d','-r', '-s', '-a' or '-t'\n" #~ msgid "%s does not exist, create it now [y/n]? " #~ msgstr "%s не ÑущеÑтвует, Ñоздать его [y/n]? " #~ msgid "aborting...\n" #~ msgstr "завершение...\n" #~ msgid "%s successfully created\n" #~ msgstr "%s Ñоздание завершено\n" #~ msgid "starting interactive mode...\n" #~ msgstr "запуÑкаетÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¹ режим...\n" #~ msgid "" #~ "The day you entered is not valid (should be between 01/01/1902 and " #~ "12/31/2037)" #~ msgstr "Введённый день должен быть между 01/01/1902 и 12/31/2037" calcurse-4.0.0/scripts/0000755000175000017500000000000012472330424012005 500000000000000calcurse-4.0.0/scripts/Makefile.in0000644000175000017500000003541512472330410013775 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = scripts ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_bin_SCRIPTS) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" SCRIPTS = $(dist_bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign dist_bin_SCRIPTS = \ calcurse-upgrade EXTRA_DIST = \ calcurse-upgrade.sh.in CLEANFILES = \ calcurse-upgrade edit = sed \ -e 's|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign scripts/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-dist_binSCRIPTS: $(dist_bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-dist_binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-dist_binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_binSCRIPTS .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dist_binSCRIPTS install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_binSCRIPTS .PRECIOUS: Makefile calcurse-upgrade: calcurse-upgrade.sh.in $(AM_V_at)$(RM) "$@" $(AM_V_GEN)$(edit) <"$(srcdir)/$<" >"$@" $(AM_V_at)chmod +x "$@" $(AM_V_at)chmod a-w "$@" # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: calcurse-4.0.0/scripts/calcurse-upgrade.sh.in0000644000175000017500000001266412472326722016133 00000000000000#!/bin/sh export TEXTDOMAIN='calcurse' set -e CONFFILE=$HOME/.calcurse/conf if [ "$#" -gt 0 ]; then if [ "$1" = "--config" ]; then CONFFILE=$2 elif [ "$1" = "-h" -o "$1" = "--help" ]; then echo "calcurse-upgrade @PACKAGE_VERSION@" echo "$(gettext "Usage: calcurse-upgrade [-h|-v|--config ]")" elif [ "$1" = "-v" -o "$1" = "--version" ]; then echo "calcurse-upgrade @PACKAGE_VERSION@" echo "$(gettext " Copyright (c) 2004-2015 calcurse Development Team. This is free software; see the source for copying conditions. ")" else echo "$(gettext "unrecognized option:") \"$1\"" >&2 exit 1 fi fi if [ ! -e "$CONFFILE" ]; then echo "$(gettext "Configuration file not found:") $CONFFILE" >&2 exit 1 fi if grep -q -e '^auto_save=' -e '^auto_gc=' -e '^periodic_save=' \ -e '^confirm_quit=' -e '^confirm_delete=' -e '^skip_system_dialogs=' \ -e '^skip_progress_bar=' -e '^calendar_default_view=' \ -e '^week_begins_on_monday=' -e '^color-theme=' -e '^layout=' \ -e '^side-bar_width=' -e '^notify-bar_show=' -e '^notify-bar_date=' \ -e '^notify-bar_clock=' -e '^notify-bar_warning=' -e '^notify-bar_command=' \ -e '^notify-all=' -e '^output_datefmt=' -e '^input_datefmt=' \ -e '^notify-daemon_enable=' -e '^notify-daemon_log=' "$CONFFILE"; then echo "$(gettext "Pre-3.0.0 configuration file format detected...")" echo -n "$(gettext "Create temporary backup of the configuration file...")" backupfile="$CONFFILE.calcurse-upgrade.old" if [ -e "$backupfile" ]; then echo echo "$(gettext "Old backup file found:") \"$backupfile\"" >&2 echo "$(gettext " If a previous conversion did not complete, please try to restore your configuration from this backup and then remove the backup file.")" >&2 exit 1 fi cp "$CONFFILE" "$backupfile" echo -n ' ' echo "$(gettext 'done')" tmpfile="$CONFFILE.calcurse-upgrade.tmp" if [ -e "$tmpfile" ]; then echo "$(gettext "Old temporary file found:") \"$tmpfile\"" >&2 echo "$(gettext " If a previous conversion did not complete, please try to remove this file and start over with a backup of your old configuration file.")" >&2 exit 1 fi echo -n "$(gettext "Upgrade configuration directives...")" sed -e 's/^auto_save=/general.autosave=/' \ -e 's/^auto_gc=/general.autogc=/' \ -e 's/^periodic_save=/general.periodicsave=/' \ -e 's/^confirm_quit=/general.confirmquit=/' \ -e 's/^confirm_delete=/general.confirmdelete=/' \ -e 's/^skip_system_dialogs=/general.systemdialogs=/' \ -e 's/^skip_progress_bar=/general.progressbar=/' \ -e 's/^calendar_default_view=/appearance.calendarview=/' \ -e 's/^week_begins_on_monday=/general.firstdayofweek=/' \ -e 's/^color-theme=/appearance.theme=/' \ -e 's/^layout=/appearance.layout=/' \ -e 's/^side-bar_width=/appearance.sidebarwidth=/' \ -e 's/^notify-bar_show=/appearance.notifybar=/' \ -e 's/^notify-bar_date=/format.notifydate=/' \ -e 's/^notify-bar_clock=/format.notifytime=/' \ -e 's/^notify-bar_warning=/notification.warning=/' \ -e 's/^notify-bar_command=/notification.command=/' \ -e 's/^notify-all=/notification.notifyall=/' \ -e 's/^output_datefmt=/format.outputdate=/' \ -e 's/^input_datefmt=/format.inputdate=/' \ -e 's/^notify-daemon_enable=/daemon.enable=/' \ -e 's/^notify-daemon_log=/daemon.log=/' "$CONFFILE" > "$tmpfile" mv "$tmpfile" "$CONFFILE" if grep -q -e '^[^#=][^#=]*$' -e '^[^#=][^#=]*#.*$' "$CONFFILE"; then sed ' /^general.autosave=/{ N s/\n// } /^general.autogc=/{ N s/\n// } /^general.periodicsave=/{ N s/\n// } /^general.confirmquit=/{ N s/\n// } /^general.confirmdelete=/{ N s/\n// } /^general.systemdialogs=/{ N s/\n// } /^general.progressbar=/{ N s/\n// } /^appearance.calendarview=/{ N s/\n// } /^general.firstdayofweek=/{ N s/\n// } /^appearance.theme=/{ N s/\n// } /^appearance.layout=/{ N s/\n// } /^appearance.sidebarwidth=/{ N s/\n// } /^appearance.notifybar=/{ N s/\n// } /^format.notifydate=/{ N s/\n// } /^format.notifytime=/{ N s/\n// } /^notification.warning=/{ N s/\n// } /^notification.command=/{ N s/\n// } /^notification.notifyall=/{ N s/\n// } /^format.outputdate=/{ N s/\n// } /^format.inputdate=/{ N s/\n// } /^daemon.enable=/{ N s/\n// } /^daemon.log=/{ N s/\n// }' "$CONFFILE" > "$tmpfile" mv "$tmpfile" "$CONFFILE" fi awk ' BEGIN { FS=OFS="=" } $1 == "general.systemdialogs" || $1 == "general.progressbar" \ { $2 = ($2 == "yes") ? "no" : "yes" } $1 == "general.firstdayofweek" { $2 = ($2 == "yes") ? "monday" : "sunday" } $1 == "appearance.calendarview" { $2 = ($2 == 0) ? "monthly" : \ ($2 == 1) ? "weekly" : $2 } { print } ' < "$CONFFILE" > "$tmpfile" mv "$tmpfile" "$CONFFILE" echo -n ' ' echo "$(gettext 'done')" echo -n "$(gettext "Remove temporary backup...")" rm "$backupfile" echo -n ' ' echo "$(gettext 'done')" fi calcurse-4.0.0/scripts/Makefile.am0000644000175000017500000000055112273003161013754 00000000000000AUTOMAKE_OPTIONS = foreign dist_bin_SCRIPTS = \ calcurse-upgrade EXTRA_DIST = \ calcurse-upgrade.sh.in CLEANFILES = \ calcurse-upgrade edit = sed \ -e 's|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' calcurse-upgrade: calcurse-upgrade.sh.in $(AM_V_at)$(RM) "$@" $(AM_V_GEN)$(edit) <"$(srcdir)/$<" >"$@" $(AM_V_at)chmod +x "$@" $(AM_V_at)chmod a-w "$@" calcurse-4.0.0/scripts/calcurse-upgrade0000555000175000017500000001263412472330424015105 00000000000000#!/bin/sh export TEXTDOMAIN='calcurse' set -e CONFFILE=$HOME/.calcurse/conf if [ "$#" -gt 0 ]; then if [ "$1" = "--config" ]; then CONFFILE=$2 elif [ "$1" = "-h" -o "$1" = "--help" ]; then echo "calcurse-upgrade 4.0.0" echo "$(gettext "Usage: calcurse-upgrade [-h|-v|--config ]")" elif [ "$1" = "-v" -o "$1" = "--version" ]; then echo "calcurse-upgrade 4.0.0" echo "$(gettext " Copyright (c) 2004-2015 calcurse Development Team. This is free software; see the source for copying conditions. ")" else echo "$(gettext "unrecognized option:") \"$1\"" >&2 exit 1 fi fi if [ ! -e "$CONFFILE" ]; then echo "$(gettext "Configuration file not found:") $CONFFILE" >&2 exit 1 fi if grep -q -e '^auto_save=' -e '^auto_gc=' -e '^periodic_save=' \ -e '^confirm_quit=' -e '^confirm_delete=' -e '^skip_system_dialogs=' \ -e '^skip_progress_bar=' -e '^calendar_default_view=' \ -e '^week_begins_on_monday=' -e '^color-theme=' -e '^layout=' \ -e '^side-bar_width=' -e '^notify-bar_show=' -e '^notify-bar_date=' \ -e '^notify-bar_clock=' -e '^notify-bar_warning=' -e '^notify-bar_command=' \ -e '^notify-all=' -e '^output_datefmt=' -e '^input_datefmt=' \ -e '^notify-daemon_enable=' -e '^notify-daemon_log=' "$CONFFILE"; then echo "$(gettext "Pre-3.0.0 configuration file format detected...")" echo -n "$(gettext "Create temporary backup of the configuration file...")" backupfile="$CONFFILE.calcurse-upgrade.old" if [ -e "$backupfile" ]; then echo echo "$(gettext "Old backup file found:") \"$backupfile\"" >&2 echo "$(gettext " If a previous conversion did not complete, please try to restore your configuration from this backup and then remove the backup file.")" >&2 exit 1 fi cp "$CONFFILE" "$backupfile" echo -n ' ' echo "$(gettext 'done')" tmpfile="$CONFFILE.calcurse-upgrade.tmp" if [ -e "$tmpfile" ]; then echo "$(gettext "Old temporary file found:") \"$tmpfile\"" >&2 echo "$(gettext " If a previous conversion did not complete, please try to remove this file and start over with a backup of your old configuration file.")" >&2 exit 1 fi echo -n "$(gettext "Upgrade configuration directives...")" sed -e 's/^auto_save=/general.autosave=/' \ -e 's/^auto_gc=/general.autogc=/' \ -e 's/^periodic_save=/general.periodicsave=/' \ -e 's/^confirm_quit=/general.confirmquit=/' \ -e 's/^confirm_delete=/general.confirmdelete=/' \ -e 's/^skip_system_dialogs=/general.systemdialogs=/' \ -e 's/^skip_progress_bar=/general.progressbar=/' \ -e 's/^calendar_default_view=/appearance.calendarview=/' \ -e 's/^week_begins_on_monday=/general.firstdayofweek=/' \ -e 's/^color-theme=/appearance.theme=/' \ -e 's/^layout=/appearance.layout=/' \ -e 's/^side-bar_width=/appearance.sidebarwidth=/' \ -e 's/^notify-bar_show=/appearance.notifybar=/' \ -e 's/^notify-bar_date=/format.notifydate=/' \ -e 's/^notify-bar_clock=/format.notifytime=/' \ -e 's/^notify-bar_warning=/notification.warning=/' \ -e 's/^notify-bar_command=/notification.command=/' \ -e 's/^notify-all=/notification.notifyall=/' \ -e 's/^output_datefmt=/format.outputdate=/' \ -e 's/^input_datefmt=/format.inputdate=/' \ -e 's/^notify-daemon_enable=/daemon.enable=/' \ -e 's/^notify-daemon_log=/daemon.log=/' "$CONFFILE" > "$tmpfile" mv "$tmpfile" "$CONFFILE" if grep -q -e '^[^#=][^#=]*$' -e '^[^#=][^#=]*#.*$' "$CONFFILE"; then sed ' /^general.autosave=/{ N s/\n// } /^general.autogc=/{ N s/\n// } /^general.periodicsave=/{ N s/\n// } /^general.confirmquit=/{ N s/\n// } /^general.confirmdelete=/{ N s/\n// } /^general.systemdialogs=/{ N s/\n// } /^general.progressbar=/{ N s/\n// } /^appearance.calendarview=/{ N s/\n// } /^general.firstdayofweek=/{ N s/\n// } /^appearance.theme=/{ N s/\n// } /^appearance.layout=/{ N s/\n// } /^appearance.sidebarwidth=/{ N s/\n// } /^appearance.notifybar=/{ N s/\n// } /^format.notifydate=/{ N s/\n// } /^format.notifytime=/{ N s/\n// } /^notification.warning=/{ N s/\n// } /^notification.command=/{ N s/\n// } /^notification.notifyall=/{ N s/\n// } /^format.outputdate=/{ N s/\n// } /^format.inputdate=/{ N s/\n// } /^daemon.enable=/{ N s/\n// } /^daemon.log=/{ N s/\n// }' "$CONFFILE" > "$tmpfile" mv "$tmpfile" "$CONFFILE" fi awk ' BEGIN { FS=OFS="=" } $1 == "general.systemdialogs" || $1 == "general.progressbar" \ { $2 = ($2 == "yes") ? "no" : "yes" } $1 == "general.firstdayofweek" { $2 = ($2 == "yes") ? "monday" : "sunday" } $1 == "appearance.calendarview" { $2 = ($2 == 0) ? "monthly" : \ ($2 == 1) ? "weekly" : $2 } { print } ' < "$CONFFILE" > "$tmpfile" mv "$tmpfile" "$CONFFILE" echo -n ' ' echo "$(gettext 'done')" echo -n "$(gettext "Remove temporary backup...")" rm "$backupfile" echo -n ' ' echo "$(gettext 'done')" fi calcurse-4.0.0/m4/0000755000175000017500000000000012472330422010634 500000000000000calcurse-4.0.0/m4/po.m40000644000175000017500000004265212472330400011441 00000000000000# po.m4 serial 3 (gettext-0.14) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl AC_REQUIRE([AM_NLS])dnl dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :) dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU msgfmt. if test "$GMSGFMT" != ":"; then dnl If it is no GNU msgfmt we define it as : so that the dnl Makefiles still can work. if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` AC_MSG_RESULT( [found $GMSGFMT program is not GNU msgfmt; ignore it]) GMSGFMT=":" fi fi dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is no GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po fi AC_OUTPUT_COMMANDS([ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <&1 conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) calcurse-4.0.0/m4/nls.m40000644000175000017500000000350512472330400011611 00000000000000# nls.m4 serial 1 (gettext-0.12) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) ]) AC_DEFUN([AM_MKINSTALLDIRS], [ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but $(top_srcdir). dnl Try to locate it. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then case "$ac_aux_dir" in /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; esac fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) ]) calcurse-4.0.0/m4/progtest.m40000644000175000017500000000563412472330400012671 00000000000000# progtest.m4 serial 3 (gettext-0.12) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) calcurse-4.0.0/m4/lib-prefix.m40000644000175000017500000001250712472330400013060 00000000000000# lib-prefix.m4 serial 3 (gettext-0.13) dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) calcurse-4.0.0/m4/lib-link.m40000644000175000017500000005534312472330400012525 00000000000000# lib-link.m4 serial 4 (gettext-0.12) dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, dnl hardcode_direct, hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib$1-prefix], [ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib$1-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) calcurse-4.0.0/m4/iconv.m40000644000175000017500000000665312472330377012157 00000000000000# iconv.m4 serial AM4 (gettext-0.11.3) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) calcurse-4.0.0/m4/gettext.m40000644000175000017500000004513012472330377012516 00000000000000# gettext.m4 serial 28 (gettext-0.13) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define(gt_included_intl, ifelse([$1], [external], [no], [yes])) define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], [])) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Set USE_NLS. AM_NLS ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. dnl Add a version number to the cache macros. define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, [AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], gt_cv_func_gnugettext_libc=yes, gt_cv_func_gnugettext_libc=no)]) if test "$gt_cv_func_gnugettext_libc" != "yes"; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], gt_cv_func_gnugettext_libintl, [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], gt_cv_func_gnugettext_libintl=yes, gt_cv_func_gnugettext_libintl=no) dnl Now see whether libintl exists and depends on libiconv. if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext_libintl=yes ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if test "$gt_cv_func_gnugettext_libc" = "yes" \ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext_libintl" = "yes"; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext_libintl" = "yes"; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE(HAVE_DCGETTEXT, 1, [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATOBJEXT) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST(DATADIRNAME) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST(GENCAT) dnl For backward compatibility. Some Makefiles may be using this. if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST(INTLOBJS) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST(INTLLIBS) dnl Make all documented variables known to autoconf. AC_SUBST(LIBINTL) AC_SUBST(LTLIBINTL) AC_SUBST(POSUB) ]) dnl Checks for all prerequisites of the intl subdirectory, dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_ISC_POSIX])dnl AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_C_CONST])dnl AC_REQUIRE([bh_C_SIGNED])dnl AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_OFF_T])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([jm_AC_TYPE_LONG_LONG])dnl AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl AC_REQUIRE([gt_TYPE_WCHAR_T])dnl AC_REQUIRE([gt_TYPE_WINT_T])dnl AC_REQUIRE([jm_AC_HEADER_INTTYPES_H]) AC_REQUIRE([jm_AC_HEADER_STDINT_H]) AC_REQUIRE([gt_TYPE_INTMAX_T]) AC_REQUIRE([gt_PRINTF_POSIX]) AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([jm_GLIBC21])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_REQUIRE([gl_XSIZE])dnl AC_CHECK_TYPE([ptrdiff_t], , [AC_DEFINE([ptrdiff_t], [long], [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) ]) AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h]) AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \ mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \ strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \ __fsetlocking]) dnl Use the _snprintf function only if it is declared (because on NetBSD it dnl is defined as a weak alias of snprintf; we prefer to use the latter). gt_CHECK_DECL(_snprintf, [#include ]) gt_CHECK_DECL(_snwprintf, [#include ]) dnl Use the *_unlocked functions only if they are declared. dnl (because some of them were defined without being declared in Solaris dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built dnl on Solaris 2.5.1 to run on Solaris 2.6). dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. gt_CHECK_DECL(feof_unlocked, [#include ]) gt_CHECK_DECL(fgets_unlocked, [#include ]) gt_CHECK_DECL(getc_unlocked, [#include ]) case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; *) HAVE_POSIX_PRINTF=0 ;; esac AC_SUBST([HAVE_POSIX_PRINTF]) if test "$ac_cv_func_asprintf" = yes; then HAVE_ASPRINTF=1 else HAVE_ASPRINTF=0 fi AC_SUBST([HAVE_ASPRINTF]) if test "$ac_cv_func_snprintf" = yes; then HAVE_SNPRINTF=1 else HAVE_SNPRINTF=0 fi AC_SUBST([HAVE_SNPRINTF]) if test "$ac_cv_func_wprintf" = yes; then HAVE_WPRINTF=1 else HAVE_WPRINTF=0 fi AC_SUBST([HAVE_WPRINTF]) AM_ICONV AM_LANGINFO_CODESET if test $ac_cv_header_locale_h = yes; then AM_LC_MESSAGES fi dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi ]) dnl gt_CHECK_DECL(FUNC, INCLUDES) dnl Check whether a function is declared. AC_DEFUN([gt_CHECK_DECL], [ AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1, [AC_TRY_COMPILE([$2], [ #ifndef $1 char *p = (char *) $1; #endif ], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)]) if test $ac_cv_have_decl_$1 = yes; then gt_value=1 else gt_value=0 fi AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value], [Define to 1 if you have the declaration of `$1', and to 0 if you don't.]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) calcurse-4.0.0/config.sub0000755000175000017500000010622312472330407012226 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-12-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: calcurse-4.0.0/NEWS0000644000175000017500000004676512472330243010756 00000000000000[22 Feb 2015] Version 4.0.0: - New features: * Support for reloading appointments via a key binding and via SIGUSR1 (thanks to Tim Hentenaar for submitting a patch). * The compact mode and default panel options are no longer hidden. * A powerful set of new command line options. The new main operations in non-interactive mode are --grep and --query. There are filter switches to restrict the set of items that are read from the appointments file. All old command line options are still supported for backwards compatibility. * Support for shorthands such as "tomorrow" or "monday" as date specifiers. * Support for dates beyond 2038 on platforms with 64-bit time_t. - Bug fixes: * Several fixes to the user interface. * Handle CRLF line endings in iCal files (reported by Hakan Jerning). * Gracefully handle all day events in iCal imports (reported by Jörn Tillmanns and by Hakan Jerning). * Retain comments in descriptions and configuration values (reported by Hakan Jerning). * Support all types of iCal durations (reported by Hakan Jerning). [08 Jul 2014] Version 3.2.1: - Bug fixes: * Load todo items on startup (reported by BARE Willy sprl). * Do not highlight items on inactive windows. [08 Jul 2014] Version 3.2.0: - New features: * Support for punctual appointments (appointments without an ending time). * A --limit option which allows for limiting the number of appointments returned (thanks to William Pettersson for submitting a patch). * Support for %(remaining) and %(duration) modifiers in format strings (thanks to William Pettersson for submitting a patch). * The online help system now uses the system pager (e.g. less(1)). * A new command prompt allows for browsing the help texts (type ":help" for more information). * Several general improvements to the user interface. - Bug fixes: * Do not garble long notes (reported by Hakan Jerning). * Fix compilation under OS X (thanks to Jack Nagel for submitting a patch). * Do not break the appointments file when importing an iCal file that contains an item with a newline in the summary (reported by Jonathan McCrohan). [09 Feb 2013] Version 3.1.4: - Bug fixes: * Do not prompt for a todo after adding an appointment. * Close key binding window when reassigning the same key (thanks to Michael Smith for submitting a patch). * Update copyright ranges. * Do not ignore "--datarootdir" in the i18n Makefile. [02 Feb 2013] Version 3.1.3: - Bug fixes: * Complete the test-suite even if libfaketime is not present. * Add a workaround for broken libfaketime-based tests on 32-bit systems (fixes Debian bug #697013). * Do not update start time/duration with bogus values if the prompt is canceled in edit mode. [16 Dec 2012] Version 3.1.2: - Bug fixes: * Fix another corner case of the screen corruption bug (BUG#6). * Fix core dump when trying to edit a non-existent item. * Display correct welcome messages on startup. [07 Dec 2012] Version 3.1.1: - Bug fixes: * Fix another screen corruption bug. * Fix several compiler warnings. [05 Dec 2012] Version 3.1.0: - New features: * Vim-like copy/paste (FR#15). Use the delete key to cut items. * Support for entering times in 24 hour format ("2130" instead of "21:30", thanks to William Pettersson for submitting a patch). * Compact panel mode (FR#7). This can be enabled using the currently undocumented "appearance.compactpanels" configuration setting. * Configurable default view (FR#19). The default view can be changed using the currently undocumented "appearance.defaultpanel" configuration setting. * "-D" and "-c" can now be used simultaneously, whereby "-c" has precedence over "-D". * Cache monthly view to speed up browsing. - Bug fixes: * Sort `calcurse -d` output by time (BUG#2, reported by Romeo Van Snick). * Fix a critical data corruption bug (BUG#7, BUG#8, reported by Baptiste Jonglez and Erik Saule). * Fix screen corruption (BUG#6, reported by Erik Saule and Antoine Jacoutot). * No longer show the calcurse screen in the editor/pager when the window is resized (BUG#9, reported by Michael Smith). * Calculate busy slices correctly if (recurrent) appointments with a duration of more than 24 hours are used. * Fix a core dump that occurred if the main window was too small. - Translation: * Several translation updates. [01 Jul 2012] Version 3.0.0: - New features: * Full UTF-8 support. * Much more powerful formatting options for printing items in non-interactive mode. Format strings can be specified using "--format-apt", "--format-event", "--format-recur-apt" and "--format-recur-event". * Support for vim-style count prefixes for displacement keys. * Powerful duration strings: Allows using extended duration strings, such as "+3:10" or "+1d20h5m". * A feature that allows piping items to external commands. * New key bindings to jump to the previous/next month/year. * A new configuration file format. `calcurse-upgrade` can be used to convert existing configuration files. * Several performance improvements. * Notes are now stored using hash-based file names which results in lower disk space usage. * A test suite that can be used to test the core functionality of calcurse. * A "--read-only" command line option to discard all changes to data files. - Bug fixes: * Do not hardcode paths to the default editor/pager. Rely on the "$PATH" variable instead. * Update the number of todo items when importing an iCal file to prevent some items from being inaccessible. * Fix a segmentation fault when importing iCal data (reported by Andraz Levstik). * Format the "DURATION" field properly on iCal export. Use days/hours/minutes/seconds instead of seconds (reported and fixed by Jerome Pinot). * Do not localize dates in pcal exports (reported by Baptiste Jonglez). - Translation: * Portuguese translation (provided by Rafael Ferreira). * 100% complete French, German and Russian translations. [08 Sep 2011] Version 2.9.2: - Bugfixes: * Handle iCal line folding correctly. * Introduce a configure option to completely exclude the documentation subdirectory from the build process ("--disable-docs"). [03 Aug 2011] Version 2.9.1: - Bugfixes: * Keep the order of events across restarts (reported by Alan). * Fix the build process when disabling documentation generation. * Avoid flickering on window resize. * Avoid a segfault when resizing the calcurse window. * Add missing documentation for the "backword-kill-word" line editing function. * Honor the "TMPDIR" environment variable instead of using hardcoded paths for temporary files (reported by Erik Saule). * Fix pager invocation when showing the log file during an import (reported by Andraz Levstik). * Accept resource parameters in iCal import. Accept additional parameters such as language parameters (reported by Andraz Levstik). * Sync the notification item after editing or pasting an appointment. This ensures the information in the notification bar as well as the countdown for the notification daemon are always up-to-date (reported by Andraz Levstik). * Fix recurrent appointment notification. * Fix flagging of regular appointments. * Fix sort order when using command line options to display upcoming appointments and events (reported by Erik Saule). [29 May 2011] Version 2.9.0 - New features: * Usage of short form dates such as "29/5/10" instead of "29/05/2010", "23" for the 23rd of the currently selected month and year or "3/1" for Mar 01 (or Jan 03, depending on the date format) of the currently selected year. * "backword-kill-word" line editing function. * Automatically drop empty notes after editing. * Documentation and man pages now are in AsciiDoc format which is easier to maintain and can be translated to several formats such as HTML, PDF, PostScript, EPUB, DocBook and much more. * Manual and man pages contain updated links to our new website and mailing lists, as well as instructions on how to use Transifex. * Extensive code cleanups and improvements. - Bugfixes: * Avoid a segfault when resizing the help window. * Remove the lock file if calcurse died (fixes Debian Bug #575772, thanks to Erik for submitting a patch). * Parse appointment end times correctly if they date back (reported by Aleksey Mechonoshin). * Fix some compiler warnings. - Translation: * Russian translation provided by Aleksey Mechonoshin. * Several translation updates. [29 May 2010] Version 2.8 - New features: * a weekly calendar view was added with the display of the week number and colored slices indicating appointment times * the side bar width can now be customized by the user - Bugfixes: * wrong calculation of recurrent dates after a turn of year fixed (patch provided by Lukas Fleischer) * check for data directory availability added * fixed a possible segfault that could be triggered when calcurse screen became too small * INSTALL file is no longer missing from the distributed package * compilation issue related to memory functions definitions fixed [22 Aug 2009] Version 2.7 - New features: * a daemon was implemented so that calcurse can now send reminders in background * new --status command line option to display information about calcurse running instances - Bugfixes: * fixed a bug which prevented ical files from being imported * no more error when user's home directory does not exist * dates are now written properly again when using the '-r' flag * incorrect duration format fixed when exporting to ical [11 Jul 2009] Version 2.6 - New features: * calcurse is now distributed under a 2-clause BSD-style license * todos can now be flagged as completed * support for regex-based searches added * locking mechanism implemented to prevent having two calcurse instances running at the same time * inside calendar panel, day names and selected date are now in the same colour as user's theme - Bugfixes: * missing 'T' letter added in the DURATION field for ical export (reported by cuz) * ical events which spans over several days are now imported correctly (reported by Andreas Kalex) * fixed gcc's `format-security' issue (reported by Francois Boulogne) * no more freeze when changing color within the configuration screen on OpenBSD * fixed a memory leak caused by a wrong use of the structures related to the notification bar * todo items are not displayed twice if -d and -t flags are both given (reported by Timo Schmiade) * it is now possible to export data from a given appointment file even if the user does not have any home directory (reported by Ben Zanin) * prevent character deletion before the beginning of the string within the online editor (reported by Martin Rehak) [25 Jan 2009] Version 2.5 - New features: * new option to periodically save data * cut and paste feature added, to move items from one day to another * support for iso date format (yyyy-mm-dd) added * new '--enable-memory-debug' configuration option to monitor memory usage * configuration scipt improved to be able to link against ncursesw if ncurses is not available - Bugfixes: * fixed a two-years old bug (appeared in version 1.5) that made repeated items with exceptions load uncorrectly in some cases (thanks to Jan Smydke for reporting it) * fixed a bug related to user-configured keys that could be lost when using calcurse in non-interactive mode [27 Dec 2008] Version 2.4 - New features: * key bindings are now user-definable * new layout configuration menu - Bugfixes: * memory leak due to a wrong use of the pthread library fixed * fixed a possible freeze when deleting an appointment's note * exception dates now properly ignored when exporting data to pcal format * daylight saving time unwanted offset fixed [14 Dec 2008] Version 2.4_beta beta version available for testing. [15 Oct 2008] Version 2.3 - New feature: * ical import added [29 Sep 2008] Version 2.3_beta beta version available for testing. [28 Aug 2008] Version 2.2 - New features: * pcal export added, to be able to produce nice-looking PostScript output * '-s', '-r' and '-D' command line arguments added which allows to use an alternative data directory, and to be more flexible when specifying the range of dates to be considered when displaying appointments and events (thanks Erik for submiting the patch) * '^G', '0' and '$' keybindings added to ease movements in calendar [12 Aug 2008] Version 2.2_beta beta version available for testing. [17 May 2008] Version 2.1 - New features: * '--note' command line argument added which allows the display of note contents in non-interactive mode (patch submitted by Erik Saule) * It is now possible to configure date formats used in calcurse interactive and non-interactive modes (patch submitted by Tony) - Bugfixes: * Debian Bug Report #469297 - Translation: * Italian manual provided by Leandro Noferini [26 Apr 2008] Version 2.1_beta beta version available for testing. [02 Mar 2008] Version 2.0 - New features: * Ability to attach notes to appointments, events and todos added * Call to an external editor/pager to edit/view notes implemented * Documentation improved, with the use of a css style sheet in html manuals - Bugfixes: * Leap years are now properly handled * configure.ac updated to link against pthread and not lpthread [16 Feb 2008] Version 2.0_beta beta version available for testing. [23 Oct 2007] Version 1.9 - New features: * Moon phase calculation added * Automatic redraw is now performed when resizing terminal * Major code cleanup release, error and signal handling improved - Bugfixes: * Current day is now automatically updated in the calendar panel * No more problem when trying to load a calendar from current directory - Translation: * Dutch translation and manual provided by Jeremy Roon [31 Aug 2007] Version 1.9_beta beta version available on request. [22 May 2007] Version 1.8 - New features: * The command launched to notify user of an upcoming appointment is now configurable, so that user can get warned by mail or by playing a tune for example * Color theme configuration menu was completely redesigned, with support for default terminal's color added * 'Export' command implemented, to be able to save calcurse data in iCalendar format. The '--export' command line argument was also implemented to be able to use this feature in non-interactive mode. * 'Flag Item' command implemented to mark appointments as 'important' so that user gets notified before they arrive - Bugfixes: * Fixed a possible problem while editing an item description and using CTRL-D to delete last character * 01/01/1970 is not returned anymore when editing an item endless repetition [15 Apr 2007] Version 1.8_beta beta version available on request. [20 Jan 2007] Version 1.7 - New features: * 'Edit Item' command implemented to be able to modify an already existing item * Long command-line options are now accepted * '-t' flag now takes a priority number as optional argument * Repeated items are now marked with an '*' to be recognizable from normal items - Bugfixes: * When creating a recurrent item, the end-date is included again in the repetition * Date format corrected in 'Go To' command [18 Dec 2006] Version 1.7_beta beta version available on request. [01 Oct 2006] Version 1.6 - New features: * Notification-bar implemented, which indicates current date and time, the calendar file in use and the next upcoming appointment together with the time left before it * '-n' flag added to get notified of the next appointment within upcoming 24 hours * Support for todo priorities added * New screen layouts added to make the todo panel the largest one * General keybindings implemented, which apply whatever panel is selected - Bugfixes: * The repeated end date can no longer be before the item start date * Fixed a possible conflict in the LOCALEDIR variable definition - Translation: * spanish translation and manual provided by Jose Lopez * german translation and manual updated by Christoph M. [26 Aug 2006] Version 1.5 - New features: * Support for recurrent events and appointments added - Bugfixes: * Debian Bug Report #369550, #377543 * fixed the compiler linking problem with libintl on systems which do not provide intl support within libc - Translation: * german translation provided by Michael Schulz * english translation provided by Neil Williams [15 May 2006] Version 1.4 - New features: * Support for i18n added * Support for non-color terminals added * Option added to choose which day is the first of the week (monday or sunday) * Documentation improved, with translated html manuals - Bugfixes: * When confirmation is requested, it is now done by pressing 'y' or 'n' instead of 'yes' or 'no' - Translation: * french translation * french and german manuals [17 Mar 2006] Version 1.3 - New features: * Adding of all-day long events * Many GUI improvements: o better scrolling (with the use of ncurses pad functions) o scrollbars added o progress bar added * Appointment duration can now be entered either in minutes or in hh:mm format - Bugfixes: * January 0 bug fixed * Current day is no longer highlighted in every year of the future and the past (thanks to Michael for reporting that bug) * Fixed compiler warnings (thanks to Uwe for reporting this) * Removed -lpanel link during compilation * Characters can now be erased with CTRL-H (to fix a problem reported by Brendan) [26 Nov 2005] Version 1.2 - New features: * An option was added to skip system dialogs * Configure script was improved - Bugfixes: * Ncurses library use improved: screen refreshing is faster, windows do not flicker anymore when updated, and memory footprint is much smaller * Changed abbreviation for 'Wednesday' from 'Wen' to 'Wed' [29 Oct 2005] Version 1.1 - New features: * Command-line options which allows to display appointments and todo list without entering the interactive mode * Manpage and documentation updated * Configure script improved - Bugfixes: * Debian Bug Report #335430 regarding the GoTo today function is now fixed [08 Oct 2005] Version 1.0 First stable release - New features: * Calcurse now comes with a manpage - Bugfixes: * Debian Bug Report #330869 regarding the October 0 which does not exist is now fixed * Default options "auto-save", "confirm-quit", and "confirm-delete" were set to 'yes' [11 Sep 2005] Version 1.0rc3 First public release [26 Jun 2005] Version 1.0rc2 beta version [02 Apr 2005] Version 1.0rc1 beta version calcurse-4.0.0/.version0000644000175000017500000000000612472330453011722 000000000000004.0.0 calcurse-4.0.0/compile0000755000175000017500000001624512472330407011625 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: calcurse-4.0.0/missing0000755000175000017500000001533012472330407011640 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: calcurse-4.0.0/test/0000755000175000017500000000000012472330424011275 500000000000000calcurse-4.0.0/test/appointment-013.sh0000755000175000017500000000034212365427602014420 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-013" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'syntax error in item time or duration' errors rm -f errors calcurse-4.0.0/test/appointment-020.sh0000755000175000017500000000033412365427602014417 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-020" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'syntax error in item repetition' errors rm -f errors calcurse-4.0.0/test/range-002.sh0000755000175000017500000000133712365427602013161 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ ! -x "$(command -v faketime)" ]; then echo "libfaketime not found - skipping $0..." exit 0 fi if [ "$1" = 'actual' ]; then faketime -f '2000-01-01 00:00:00' "$CALCURSE" --read-only -D "$DATA_DIR"/ \ -r400 elif [ "$1" = 'expected' ]; then cat < ..:.. Plodder's moulting smokestacks instruments vagrancy's 10/20/00: - ..:.. -> 04:55 Plodder's moulting smokestacks instruments vagrancy's 01/25/01: * Accurateness hoed flakiness's EOD else ./run-test "$0" fi calcurse-4.0.0/test/appointment-003.sh0000755000175000017500000000043712365427601014423 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-003" \ -d02/23/2013 elif [ "$1" = 'expected' ]; then cat < ..:.. Appointment EOD else ./run-test "$0" fi calcurse-4.0.0/test/appointment-012.sh0000755000175000017500000000032612365427602014421 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-012" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'date error in appointment' errors rm -f errors calcurse-4.0.0/test/Makefile.in0000644000175000017500000013663412472330410013272 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = run-test$(EXEEXT) subdir = test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_run_test_OBJECTS = run-test.$(OBJEXT) run_test_OBJECTS = $(am_run_test_OBJECTS) run_test_LDADD = $(LDADD) SCRIPTS = $(noinst_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(run_test_SOURCES) DIST_SOURCES = $(run_test_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs $(top_srcdir)/test-driver README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign TESTS = \ true-001.sh \ run-test-001.sh \ run-test-002.sh \ todo-001.sh \ todo-002.sh \ todo-003.sh \ day-001.sh \ day-002.sh \ day-003.sh \ range-001.sh \ range-002.sh \ range-003.sh \ appointment-001.sh \ appointment-002.sh \ appointment-003.sh \ appointment-004.sh \ appointment-005.sh \ appointment-006.sh \ appointment-007.sh \ appointment-008.sh \ appointment-009.sh \ appointment-010.sh \ appointment-011.sh \ appointment-012.sh \ appointment-013.sh \ appointment-014.sh \ appointment-015.sh \ appointment-016.sh \ appointment-017.sh \ appointment-018.sh \ appointment-019.sh \ appointment-020.sh \ appointment-021.sh \ appointment-022.sh \ event-001.sh \ event-002.sh \ event-003.sh \ event-004.sh \ event-005.sh \ event-006.sh \ filter-001.sh \ ical-001.sh \ ical-002.sh \ ical-003.sh \ ical-004.sh \ ical-005.sh \ ical-006.sh \ next-001.sh \ search-001.sh \ bug-002.sh \ recur-001.sh \ recur-002.sh \ recur-003.sh \ recur-004.sh \ recur-005.sh TESTS_ENVIRONMENT = \ TEST_INIT='$(top_srcdir)/test/test-init.sh' \ CALCURSE='$(top_builddir)/src/calcurse' \ DATA_DIR='$(top_srcdir)/test/data/' AM_CFLAGS = -std=c99 -pedantic -D_POSIX_C_SOURCE=200809L check_SCRIPTS = test-init.sh noinst_SCRIPTS = $(check_SCRIPTS) run_test_SOURCES = run-test.c EXTRA_DIST = \ $(TESTS) \ test-init.sh \ data/apts \ data/apts-appointment-002 \ data/apts-appointment-003 \ data/apts-appointment-004 \ data/apts-appointment-005 \ data/apts-appointment-006 \ data/apts-appointment-007 \ data/apts-appointment-008 \ data/apts-appointment-009 \ data/apts-appointment-010 \ data/apts-appointment-011 \ data/apts-appointment-012 \ data/apts-appointment-013 \ data/apts-appointment-014 \ data/apts-appointment-015 \ data/apts-appointment-016 \ data/apts-appointment-017 \ data/apts-appointment-018 \ data/apts-appointment-019 \ data/apts-appointment-020 \ data/apts-appointment-021 \ data/apts-appointment-022 \ data/apts-bug-002 \ data/apts-event-001 \ data/apts-event-002 \ data/apts-event-003 \ data/apts-event-004 \ data/apts-event-005 \ data/apts-event-006 \ data/apts-filter-001 \ data/apts-recur \ data/conf \ data/ical-001.ical \ data/ical-002.ical \ data/ical-003.ical \ data/ical-004.ical \ data/ical-005.ical \ data/ical-006.ical \ data/todo all: all-am .SUFFIXES: .SUFFIXES: .c .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) run-test$(EXEEXT): $(run_test_OBJECTS) $(run_test_DEPENDENCIES) $(EXTRA_run_test_DEPENDENCIES) @rm -f run-test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(run_test_OBJECTS) $(run_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-test.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) $(check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? true-001.sh.log: true-001.sh @p='true-001.sh'; \ b='true-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run-test-001.sh.log: run-test-001.sh @p='run-test-001.sh'; \ b='run-test-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) run-test-002.sh.log: run-test-002.sh @p='run-test-002.sh'; \ b='run-test-002.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) todo-001.sh.log: todo-001.sh @p='todo-001.sh'; \ b='todo-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) todo-002.sh.log: todo-002.sh @p='todo-002.sh'; \ b='todo-002.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) todo-003.sh.log: todo-003.sh @p='todo-003.sh'; \ b='todo-003.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) day-001.sh.log: day-001.sh @p='day-001.sh'; \ b='day-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) day-002.sh.log: day-002.sh @p='day-002.sh'; \ b='day-002.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) day-003.sh.log: day-003.sh @p='day-003.sh'; \ b='day-003.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) range-001.sh.log: range-001.sh @p='range-001.sh'; \ b='range-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) range-002.sh.log: range-002.sh @p='range-002.sh'; \ b='range-002.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) range-003.sh.log: range-003.sh @p='range-003.sh'; \ b='range-003.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-001.sh.log: appointment-001.sh @p='appointment-001.sh'; \ b='appointment-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-002.sh.log: appointment-002.sh @p='appointment-002.sh'; \ b='appointment-002.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-003.sh.log: appointment-003.sh @p='appointment-003.sh'; \ b='appointment-003.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-004.sh.log: appointment-004.sh @p='appointment-004.sh'; \ b='appointment-004.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-005.sh.log: appointment-005.sh @p='appointment-005.sh'; \ b='appointment-005.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-006.sh.log: appointment-006.sh @p='appointment-006.sh'; \ b='appointment-006.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-007.sh.log: appointment-007.sh @p='appointment-007.sh'; \ b='appointment-007.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-008.sh.log: appointment-008.sh @p='appointment-008.sh'; \ b='appointment-008.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-009.sh.log: appointment-009.sh @p='appointment-009.sh'; \ b='appointment-009.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-010.sh.log: appointment-010.sh @p='appointment-010.sh'; \ b='appointment-010.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-011.sh.log: appointment-011.sh @p='appointment-011.sh'; \ b='appointment-011.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-012.sh.log: appointment-012.sh @p='appointment-012.sh'; \ b='appointment-012.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-013.sh.log: appointment-013.sh @p='appointment-013.sh'; \ b='appointment-013.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-014.sh.log: appointment-014.sh @p='appointment-014.sh'; \ b='appointment-014.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-015.sh.log: appointment-015.sh @p='appointment-015.sh'; \ b='appointment-015.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-016.sh.log: appointment-016.sh @p='appointment-016.sh'; \ b='appointment-016.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-017.sh.log: appointment-017.sh @p='appointment-017.sh'; \ b='appointment-017.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-018.sh.log: appointment-018.sh @p='appointment-018.sh'; \ b='appointment-018.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-019.sh.log: appointment-019.sh @p='appointment-019.sh'; \ b='appointment-019.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-020.sh.log: appointment-020.sh @p='appointment-020.sh'; \ b='appointment-020.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-021.sh.log: appointment-021.sh @p='appointment-021.sh'; \ b='appointment-021.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) appointment-022.sh.log: appointment-022.sh @p='appointment-022.sh'; \ b='appointment-022.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) event-001.sh.log: event-001.sh @p='event-001.sh'; \ b='event-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) event-002.sh.log: event-002.sh @p='event-002.sh'; \ b='event-002.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) event-003.sh.log: event-003.sh @p='event-003.sh'; \ b='event-003.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) event-004.sh.log: event-004.sh @p='event-004.sh'; \ b='event-004.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) event-005.sh.log: event-005.sh @p='event-005.sh'; \ b='event-005.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) event-006.sh.log: event-006.sh @p='event-006.sh'; \ b='event-006.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) filter-001.sh.log: filter-001.sh @p='filter-001.sh'; \ b='filter-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ical-001.sh.log: ical-001.sh @p='ical-001.sh'; \ b='ical-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ical-002.sh.log: ical-002.sh @p='ical-002.sh'; \ b='ical-002.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ical-003.sh.log: ical-003.sh @p='ical-003.sh'; \ b='ical-003.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ical-004.sh.log: ical-004.sh @p='ical-004.sh'; \ b='ical-004.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ical-005.sh.log: ical-005.sh @p='ical-005.sh'; \ b='ical-005.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ical-006.sh.log: ical-006.sh @p='ical-006.sh'; \ b='ical-006.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) next-001.sh.log: next-001.sh @p='next-001.sh'; \ b='next-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) search-001.sh.log: search-001.sh @p='search-001.sh'; \ b='search-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) bug-002.sh.log: bug-002.sh @p='bug-002.sh'; \ b='bug-002.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) recur-001.sh.log: recur-001.sh @p='recur-001.sh'; \ b='recur-001.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) recur-002.sh.log: recur-002.sh @p='recur-002.sh'; \ b='recur-002.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) recur-003.sh.log: recur-003.sh @p='recur-003.sh'; \ b='recur-003.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) recur-004.sh.log: recur-004.sh @p='recur-004.sh'; \ b='recur-004.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) recur-005.sh.log: recur-005.sh @p='recur-005.sh'; \ b='recur-005.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(SCRIPTS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: calcurse-4.0.0/test/appointment-011.sh0000755000175000017500000000034212365427602014416 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-011" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'syntax error in item time or duration' errors rm -f errors calcurse-4.0.0/test/ical-002.sh0000755000175000017500000000131512472326533012771 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then mkdir .calcurse || exit 1 cp "$DATA_DIR/conf" .calcurse || exit 1 "$CALCURSE" -D "$PWD/.calcurse" -i "$DATA_DIR/ical-002.ical" "$CALCURSE" -D "$PWD/.calcurse" -s01/01/2000 -r2 rm -rf .calcurse || exit 1 elif [ "$1" = 'expected' ]; then cat < 00:00 One day - 00:00 -> ..:.. One day, one hour, one minute and one second - 00:00 -> 01:01 One hour, one minute and one second - 00:00 -> 00:01 One minute and one second 01/02/00: - ..:.. -> 01:01 One day, one hour, one minute and one second EOD else ./run-test "$0" fi calcurse-4.0.0/test/appointment-009.sh0000755000175000017500000000032612365427602014427 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-009" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'date error in appointment' errors rm -f errors calcurse-4.0.0/test/data/0000755000175000017500000000000012472330424012206 500000000000000calcurse-4.0.0/test/data/apts-appointment-0120000644000175000017500000000006612273003161015650 0000000000000002/22/2013 @ 24:00 -> 02/23/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/apts-event-0030000644000175000017500000000002512273003161014426 0000000000000002/29/2013 [1] Event calcurse-4.0.0/test/data/apts-event-0010000644000175000017500000000002512273003161014424 0000000000000002/23/2013 [1] Event calcurse-4.0.0/test/data/apts-event-0020000644000175000017500000000002512273003161014425 0000000000000002.23.2013 [1] Event calcurse-4.0.0/test/data/ical-002.ical0000644000175000017500000000103012472326533014167 00000000000000BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT DTSTART:20000101T000000 DURATION:P1DT0H0M0S SUMMARY:One day END:VEVENT BEGIN:VEVENT DTSTART:20000101T000000 DURATION:P1DT1H1M1S SUMMARY:One day, one hour, one minute and one second END:VEVENT BEGIN:VEVENT DTSTART:20000101T000000 DURATION:PT1H1M1S SUMMARY:One hour, one minute and one second END:VEVENT BEGIN:VEVENT DTSTART:20000101T000000 DURATION:PT1M1S SUMMARY:One minute and one second END:VEVENT BEGIN:VEVENT DTSTART:20000101T000000 DURATION:PT1S SUMMARY:One second END:VEVENT END:VCALENDAR calcurse-4.0.0/test/data/apts-appointment-0020000644000175000017500000000006612273003161015647 0000000000000002/23/2013 @ 10:00 -> 02/23/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/apts-appointment-0160000644000175000017500000000006612273003161015654 0000000000000002/23/2013 @ 10:00 -> 02/29/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/apts-appointment-0070000644000175000017500000000014012273003161015645 0000000000000002/23/2013 @ 10:00 -> 02/23/2013 @ 12:00 >ce96f39624a379da19b5549bad6b9a8beed24403 |Appointment calcurse-4.0.0/test/data/apts-bug-0020000644000175000017500000000023112273003161014060 0000000000000003/22/2012 @ 18:30 -> 03/22/2012 @ 21:30 {1W -> 06/21/2012} |German Class 04/19/2012 @ 10:45 -> 04/19/2012 @ 12:45 {1W -> 05/06/2012} |Quantum Mechanics calcurse-4.0.0/test/data/apts-appointment-0140000644000175000017500000000006612273003161015652 0000000000000002/23/2013 @ 10:00 -. 02/23/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/apts-appointment-0060000644000175000017500000000006612273003161015653 0000000000000002/23/2013 @ 10:00 -> 02/23/2013 @ 12:00 !Appointment calcurse-4.0.0/test/data/apts-recur0000644000175000017500000000134112273003161014127 0000000000000001/01/2000 [1] {1D} Each day since 2000-01-01 01/01/2000 [1] {1W} Each Saturday since 2000-01-01 01/01/2000 [1] {1M} Each first day of the month since 2000-01-01 01/01/2000 [1] {1Y} Every year on January, 1st since year 2000 01/01/2000 [1] {2D} Every second day since 2000-01-01 01/01/2000 [1] {4W} Every 28 days since 2000-01-01 01/01/2000 [1] {7D} Same as "01/01/2000 [1] {1W}" 01/01/2000 [1] {3D -> 12/31/2000} Every three days in year 2000 01/01/2000 [1] {3D !01/04/2000} Every three days, but not on 2000-01-04 01/01/2000 @ 16:00 -> 01/02/2000 @ 02:00 {2D} |Recurrent appointment 01/01/2000 @ 00:00 -> 01/07/2000 @ 00:00 {1W} |Another recurrent appointment 01/01/2000 @ 00:00 -> 01/07/2000 @ 00:00 {1D} |Third recurrent appointment calcurse-4.0.0/test/data/apts-appointment-0080000644000175000017500000000006612273003161015655 0000000000000002.23.2013 @ 10:00 -> 02/23/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/ical-005.ical0000644000175000017500000000063612472326722014205 00000000000000BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT SUMMARY:All day DTSTART;VALUE=DATE:20131003 DTEND;VALUE=DATE:20131004 END:VEVENT BEGIN:VEVENT SUMMARY:Two days DTSTART;VALUE=DATE:20131003 DTEND;VALUE=DATE:20131005 END:VEVENT BEGIN:VEVENT SUMMARY:On day 1 DTSTART;VALUE=DATE:20131003 DTEND;VALUE=DATE:20131004 TRANSP:TRANSPARENT END:VEVENT BEGIN:VEVENT SUMMARY:On day 2 DTSTART;VALUE=DATE:20131003 END:VEVENT END:VCALENDAR calcurse-4.0.0/test/data/apts-appointment-0150000644000175000017500000000006612273003161015653 0000000000000002/23/2013 @ 10:00 -> 02.23.2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/apts-appointment-0030000644000175000017500000000006612273003161015650 0000000000000002/23/2013 @ 10:00 -> 02/24/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/apts-appointment-0090000644000175000017500000000006612273003161015656 0000000000000001/32/2013 @ 10:00 -> 02/23/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/apts-appointment-0170000644000175000017500000000006612273003161015655 0000000000000002/23/2013 @ 10:00 -> 02/23/2013 . 12:00 |Appointment calcurse-4.0.0/test/data/apts-filter-0010000644000175000017500000000047412472326722014614 0000000000000002/22/2013 [1] Event 1 02/23/2013 [1] Event 2 02/24/2013 [1] Event 3 02/25/2013 [1] Event 4 02/22/2013 @ 10:00 -> 02/22/2013 @ 12:00 |Appointment 1 02/23/2013 @ 10:00 -> 02/23/2013 @ 12:00 |Appointment 2 02/24/2013 @ 10:00 -> 02/24/2013 @ 12:00 |Appointment 3 02/25/2013 @ 10:00 -> 02/25/2013 @ 12:00 |Appointment 4 calcurse-4.0.0/test/data/ical-001.ical0000644000175000017500000000032312472326722014172 00000000000000BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT DTSTART:19800101T000100 DURATION:P1DT9H17M0S SUMMARY:Calibrator's END:VEVENT BEGIN:VTODO PRIORITY:1 SUMMARY:Nary parabled Louvre's fleetest mered END:VTODO END:VCALENDAR calcurse-4.0.0/test/data/apts-appointment-0050000644000175000017500000000006612273003161015652 0000000000000002/22/2013 @ 10:00 -> 02/24/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/conf0000644000175000017500000000477112273003161013001 00000000000000# # Calcurse configuration file # # This file sets the configuration options used by Calcurse. These # options are usually set from within Calcurse. A line beginning with # a space or tab is considered to be a continuation of the previous line. # For a variable to be unset its value must be blank, followed by an # empty line. To set a variable to the empty string its value should be "". # Lines beginning with "#" are comments, and ignored by Calcurse. # If this option is set to yes, automatic save is done when quitting general.autosave=yes # If this option is set to yes, the GC is run automatically when quitting general.autogc=no # If not null, perform automatic saves every 'periodic_save' minutes general.periodicsave=0 # If this option is set to yes, confirmation is required before quitting general.confirmquit=yes # If this option is set to yes, confirmation is required before deleting an event general.confirmdelete=yes # If this option is set to yes, messages about loaded and saved data will not be displayed general.systemdialogs=no # If this option is set to yes, progress bar appearing when saving data will not be displayed general.progressbar=no # Default calendar view (0)monthly (1)weekly: appearance.calendarview=monthly # If this option is set to yes, monday is the first day of the week, else it is sunday general.firstdayofweek=monday # This is the color theme used for menus : appearance.theme=red on default # This is the layout of the calendar : appearance.layout=1 # Width ( percentage, 0 being minimun width, fp) of the side bar : appearance.sidebarwidth=1 # If this option is set to yes, notify-bar will be displayed : appearance.notifybar=yes # Format of the date to be displayed inside notify-bar : format.notifydate=%a %F # Format of the time to be displayed inside notify-bar : format.notifytime=%T # Warn user if he has an appointment within next 'notify-bar_warning' seconds : notification.warning=300 # Command used to notify user of an upcoming appointment : notification.command=printf '\a' # Notify all appointments instead of flagged ones only notification.notifyall=no # Format of the date to be displayed in non-interactive mode : format.outputdate=%D # Format to be used when entering a date (1)mm/dd/yyyy (2)dd/mm/yyyy (3)yyyy/mm/dd) (4)yyyy-mm-dd: format.inputdate=1 # If this option is set to yes, calcurse will run in background to get notifications after exiting daemon.enable=no # If this option is set to yes, activity will be logged when running in background daemon.log=no calcurse-4.0.0/test/data/apts0000644000175000017500000013052412273003161013017 0000000000000012/27/1911 @ 01:18 -> 12/29/1911 @ 18:52 |Outsmarts Leoncavallo's daunting 02/10/1912 @ 20:36 -> 02/14/1912 @ 21:46 |Relieving uncleanliest footnoting unscrewed 04/28/1912 @ 02:54 -> 04/30/1912 @ 16:47 |Visit repel egotism antidepressant Idahos 07/10/1912 @ 17:47 -> 07/13/1912 @ 03:18 |Impersonating integer broils blame 09/27/1912 @ 16:07 -> 10/02/1912 @ 07:24 |Wedgwood's dilating 10/28/1913 @ 11:18 -> 11/01/1913 @ 17:07 |Deviation perspire 12/23/1913 @ 07:25 -> 12/23/1913 @ 17:46 |Nintendo stapler jellyfish vaporous 09/08/1914 @ 07:41 -> 09/11/1914 @ 18:15 |Panelling 03/22/1915 @ 07:21 -> 03/25/1915 @ 20:57 |Veritable intercom's 08/12/1915 @ 23:57 -> 08/16/1915 @ 23:02 |Meddlers presides prefabricates Disneyland's 08/27/1915 @ 07:34 -> 08/29/1915 @ 23:36 |EverReady's tramping patches napped 06/16/1916 @ 15:56 -> 06/19/1916 @ 15:05 |Rediscovery's Barnaby's lummox's shan't 06/19/1916 @ 15:35 -> 06/23/1916 @ 09:00 |Lu gastric Valenti bankruptcy's intents 10/01/1916 @ 08:13 -> 10/02/1916 @ 11:56 |Appropriately Potemkin's hassocks snappier Millay 12/12/1916 @ 12:04 -> 12/15/1916 @ 08:31 |Thefts infrastructure's chides 01/20/1917 @ 07:12 -> 01/20/1917 @ 12:19 |Outfit Hannah 07/22/1917 @ 04:28 -> 07/22/1917 @ 10:04 |Shallowness's tap's enjoining chewy obligation's 07/30/1917 @ 08:34 -> 08/04/1917 @ 11:53 |Stephan 03/25/1918 @ 11:14 -> 03/29/1918 @ 14:57 |Butterfat Cherry's aviators albs fattier 01/26/1919 @ 17:43 -> 01/26/1919 @ 23:18 |Creakiest cocking disporting polyhedron auditions 03/21/1919 @ 19:33 -> 03/23/1919 @ 03:37 |Stethoscopes Singer's vermouth pincers 04/01/1919 @ 23:51 -> 04/03/1919 @ 09:19 |Doughtiest 05/14/1919 @ 05:55 -> 05/16/1919 @ 22:47 |Aviation's O'Neill welding 06/21/1919 @ 01:48 -> 06/22/1919 @ 01:07 |Marquis grid sprinkling's 06/30/1919 @ 13:48 -> 07/03/1919 @ 06:08 |Barracudas 07/05/1919 @ 09:09 -> 07/10/1919 @ 10:56 |Lea's mullion remove connects collation's 09/07/1919 @ 20:52 -> 09/11/1919 @ 17:11 |Alps hotshot 01/21/1921 @ 19:57 -> 01/22/1921 @ 18:42 |Gunk 05/01/1921 @ 20:50 -> 05/01/1921 @ 20:57 |Citibank 06/19/1921 @ 08:01 -> 06/22/1921 @ 10:20 |Coziness sloshed retyping southwards intensified 08/02/1921 @ 16:46 -> 08/04/1921 @ 22:17 |Malawi's undefinable Copacabana hungered 08/04/1921 @ 00:58 -> 08/04/1921 @ 09:07 |Bagpipes dole shores 01/16/1922 @ 13:01 -> 01/17/1922 @ 14:32 |Gravies 06/23/1922 @ 13:56 -> 06/25/1922 @ 02:12 |Funnelling creation's regionalisms skivvied jaunted 07/08/1922 @ 17:13 -> 07/09/1922 @ 08:03 |Alleluia Freetown's 07/14/1922 @ 05:26 -> 07/19/1922 @ 11:28 |Pittsburgh's joined overbearing propellant's 03/07/1923 @ 17:37 -> 03/09/1923 @ 22:27 |Impulsion Sheffield's Swanson's 05/17/1923 @ 13:01 -> 05/19/1923 @ 04:23 |Disconnections 07/06/1923 @ 18:38 -> 07/09/1923 @ 13:26 |Sightseeing yarns 08/07/1923 @ 17:38 -> 08/11/1923 @ 03:34 |Tc's 12/20/1923 @ 11:05 -> 12/21/1923 @ 09:31 |Chanter snuffs Hymen 03/19/1924 @ 10:11 -> 03/20/1924 @ 04:34 |Powder imagines devastating 07/11/1924 @ 18:34 -> 07/13/1924 @ 09:32 |Manley's Telemann 01/24/1926 @ 09:39 -> 01/28/1926 @ 00:32 |Freebases improvidence maggot gestation's 06/30/1926 @ 17:36 -> 07/01/1926 @ 22:54 |Antibody poor Atlantes 07/24/1926 @ 13:52 -> 07/28/1926 @ 14:48 |Piety's 08/19/1926 @ 21:46 -> 08/21/1926 @ 00:07 |Incur hearties outlining sensationalists 09/15/1926 @ 09:13 -> 09/17/1926 @ 08:27 |Theocritus's 03/17/1927 @ 05:31 -> 03/17/1927 @ 17:55 |Closets scrape addictive consummations 05/27/1927 @ 12:40 -> 05/28/1927 @ 10:43 |Pharaoh Montoya bloods acclamation yesteryear's 06/05/1927 @ 15:47 -> 06/07/1927 @ 00:26 |Pawned subplot's Dzerzhinsky 11/18/1927 @ 13:33 -> 11/21/1927 @ 19:10 |Splurges 06/05/1928 @ 13:34 -> 06/06/1928 @ 17:32 |Auricle's precognition cytoplasm 07/02/1928 @ 05:14 -> 07/03/1928 @ 00:20 |Saboteurs crassest moderator's waif's fear's 10/24/1928 @ 02:11 -> 10/28/1928 @ 16:48 |Restorers indifferent Schwinger's Valentino's bowing 11/01/1928 @ 09:39 -> 11/05/1928 @ 02:18 |Dalmatians lionizing colonist hustle tawdrier 11/05/1928 @ 06:20 -> 11/08/1928 @ 17:22 |Boob's pied sorest 12/28/1928 @ 01:34 -> 12/28/1928 @ 01:43 |Intermezzo's cockerel 04/30/1929 @ 02:40 -> 05/02/1929 @ 13:42 |Unnecessarily imploring rebut Cuvier 08/29/1929 @ 08:55 -> 08/31/1929 @ 09:04 |Motherland distances cornbread reflect 09/16/1929 @ 11:58 -> 09/19/1929 @ 18:10 |Misstate ghoul 05/13/1930 @ 20:14 -> 05/15/1930 @ 01:57 |Groan's crabbed fifty's Mugabe 09/07/1930 @ 21:39 -> 09/11/1930 @ 14:25 |Surpasses received Kidd Midway consoled 11/06/1930 @ 05:01 -> 11/09/1930 @ 15:37 |Seafaring ravined petunia's babe's hose 06/24/1931 @ 20:40 -> 06/28/1931 @ 08:56 |Stiffening hodgepodges embarkation's 07/18/1931 @ 00:40 -> 07/21/1931 @ 21:13 |Colony explosions Gienah's 11/07/1931 @ 09:33 -> 11/10/1931 @ 07:30 |Intoxicant's Rex amphetamine's curacy's cardiologists 11/28/1931 @ 13:19 -> 11/29/1931 @ 10:56 |Sawdusting vicariously brunette's 03/22/1932 @ 07:58 -> 03/23/1932 @ 15:26 |Mailboxes pigment's jasmine 05/06/1932 @ 19:31 -> 05/08/1932 @ 15:08 |Felix's possibles debilitation's 12/07/1932 @ 14:30 -> 12/10/1932 @ 10:24 |Electioneering truces 03/18/1933 @ 16:50 -> 03/22/1933 @ 13:55 |Rotisseries powwowed abutment's crash evacuee's 08/24/1933 @ 09:24 -> 08/25/1933 @ 13:22 |Usage 12/28/1933 @ 10:48 -> 12/28/1933 @ 13:14 |Martial knitted woodenness's GE glassful's 01/12/1934 @ 00:25 -> 01/14/1934 @ 16:05 |Languors uncommonly magnetizing cataclysm 06/23/1934 @ 07:35 -> 06/28/1934 @ 00:23 |Pogromed 06/26/1934 @ 12:56 -> 07/01/1934 @ 00:06 |Outburst Delilah upbeat hooky ideologies 08/06/1934 @ 20:27 -> 08/09/1934 @ 08:18 |Effectuates kilogram region's Debby's 10/06/1934 @ 06:31 -> 10/11/1934 @ 01:13 |Leftest tire's propagation 10/21/1934 @ 18:18 -> 10/21/1934 @ 23:06 |Delta applause's backside allusion Lamb's 11/21/1934 @ 01:28 -> 11/25/1934 @ 12:28 |Milling discontinuances migration's introducing 11/29/1934 @ 21:28 -> 12/01/1934 @ 11:52 |Porpoise Angora's overwrite 04/19/1935 @ 01:32 -> 04/20/1935 @ 09:03 |Elbowing ricked 07/18/1935 @ 08:15 -> 07/22/1935 @ 18:48 |Anaerobic filmmakers 08/08/1935 @ 21:02 -> 08/10/1935 @ 02:18 |Isherwood's yearning's Modesto's forswearing 10/06/1935 @ 15:39 -> 10/11/1935 @ 07:45 |Mannerism's Koppel's Philippe's 11/06/1935 @ 22:58 -> 11/10/1935 @ 12:09 |Flog impacts 05/03/1936 @ 12:03 -> 05/07/1936 @ 06:07 |Pluralities Capitol 07/15/1936 @ 11:02 -> 07/17/1936 @ 19:10 |Sancta nones 08/05/1936 @ 14:13 -> 08/06/1936 @ 04:38 |Rustbelt slacking valedictorians 01/04/1937 @ 11:54 -> 01/04/1937 @ 14:31 |Gynecological Babur barking 05/20/1937 @ 04:24 -> 05/20/1937 @ 05:31 |Mayra's Muscovy grumble 02/08/1938 @ 12:02 -> 02/12/1938 @ 14:25 |Graveyards aha leftover's intrusted tobacco 02/15/1938 @ 11:18 -> 02/16/1938 @ 18:50 |Pt vulcanize Chayefsky Harlan cerebella 03/31/1938 @ 18:28 -> 04/01/1938 @ 12:12 |Musicologist's Lorie Indiana monograming 04/28/1938 @ 14:00 -> 05/01/1938 @ 17:35 |Stalingrad stagnating flame stacked 07/18/1938 @ 08:36 -> 07/21/1938 @ 10:02 |Vacuum lingering cantaloup 09/10/1938 @ 15:13 -> 09/11/1938 @ 13:50 |Unpleasant loudly ingredients owning 12/30/1938 @ 01:27 -> 12/30/1938 @ 18:30 |Exigent circumventing pundit Dietrich pertinents 11/27/1939 @ 22:21 -> 11/28/1939 @ 18:06 |Novice greasier 12/02/1939 @ 06:49 -> 12/06/1939 @ 05:46 |Lunchtimes compression Mazola's 02/27/1940 @ 09:29 -> 02/27/1940 @ 10:01 |Somnambulism Appomattox's ductile shades 01/21/1941 @ 00:48 -> 01/21/1941 @ 04:20 |Dysentery Oldfield phonograph lavendered 08/01/1941 @ 01:14 -> 08/02/1941 @ 09:11 |Garrotes species sandpapering 11/12/1941 @ 15:08 -> 11/13/1941 @ 05:37 |Gutierrez's discarding adjudicators astutest Alyce's 06/18/1942 @ 19:24 -> 06/19/1942 @ 09:01 |Lanyard 06/28/1942 @ 14:03 -> 06/30/1942 @ 02:29 |Panoramic murderesses 09/22/1942 @ 00:58 -> 09/26/1942 @ 21:44 |Malplaquet's Benelux pantsuit 12/06/1942 @ 09:46 -> 12/07/1942 @ 04:33 |Manuel glorified four 09/02/1943 @ 18:01 -> 09/03/1943 @ 10:39 |Decriminalized Bacon 12/15/1943 @ 15:40 -> 12/18/1943 @ 22:57 |Laundress Galibi's equine 01/30/1944 @ 01:51 -> 01/30/1944 @ 03:52 |Attenuates rarefying Pomeranian vivisection's laughably 03/18/1944 @ 17:11 -> 03/20/1944 @ 11:57 |Laundry's Cote's 06/28/1944 @ 23:38 -> 06/29/1944 @ 13:04 |Film's colonizer 04/20/1945 @ 12:03 -> 04/22/1945 @ 13:53 |Chandragupta shrimp payoff barometric zone's 06/08/1945 @ 11:23 -> 06/13/1945 @ 02:29 |Fling Jinnah 03/06/1946 @ 11:55 -> 03/11/1946 @ 04:52 |Drowning snailing drawbacks 03/17/1946 @ 12:16 -> 03/19/1946 @ 14:30 |Needles awnings roughhouses 03/19/1946 @ 21:06 -> 03/22/1946 @ 12:43 |Magpie's doohickey 06/22/1946 @ 19:16 -> 06/23/1946 @ 19:02 |Dobbin's spiked 10/23/1946 @ 15:44 -> 10/26/1946 @ 17:49 |Nauru Worcester 07/28/1947 @ 19:04 -> 08/03/1947 @ 02:17 |Manufacturer preterit's delectable fulcrum 03/25/1948 @ 11:07 -> 03/28/1948 @ 01:40 |Shaggiest Chan astrakhan marten 06/15/1948 @ 14:24 -> 06/17/1948 @ 19:03 |Cabrini directer pennies 05/25/1949 @ 11:16 -> 05/26/1949 @ 12:58 |Anybodies keystroke's 08/07/1949 @ 21:47 -> 08/08/1949 @ 13:21 |Ormolu Stephenson diatoms 10/23/1949 @ 19:18 -> 10/27/1949 @ 02:41 |Smouldering hales curios refinished dogmatic 10/28/1949 @ 03:45 -> 10/31/1949 @ 22:17 |Principals six Geller's 06/24/1950 @ 10:34 -> 06/28/1950 @ 12:35 |Disembowels 07/11/1950 @ 03:22 -> 07/12/1950 @ 17:20 |Coiffing Trent cosmologies penalizes minuteness's 07/20/1950 @ 14:25 -> 07/24/1950 @ 02:35 |Recreant eclipsed 10/13/1950 @ 21:53 -> 10/17/1950 @ 14:07 |Dredger 10/30/1950 @ 14:11 -> 10/31/1950 @ 15:34 |Unleashing tusk's incidences 12/10/1951 @ 05:28 -> 12/10/1951 @ 20:02 |Linemen 09/03/1952 @ 05:06 -> 09/03/1952 @ 11:52 |Simmons 11/05/1952 @ 15:24 -> 11/06/1952 @ 21:10 |Sheers quiche mixture's proprietorship's cone 12/04/1952 @ 02:54 -> 12/05/1952 @ 18:40 |Unreal collaboration jabots pigeoned analytics 09/04/1953 @ 09:24 -> 09/08/1953 @ 06:57 |Contentedness's perpendicular atmosphere 11/13/1953 @ 09:24 -> 11/17/1953 @ 03:12 |Hilbert's 04/01/1954 @ 05:40 -> 04/02/1954 @ 21:14 |Think equipment's sturdiness's birdbath's 06/16/1954 @ 01:30 -> 06/21/1954 @ 00:11 |Quotients prerequisite 02/06/1955 @ 07:45 -> 02/10/1955 @ 08:35 |Jami's shard's 07/19/1955 @ 04:27 -> 07/20/1955 @ 12:47 |Nanjing Apollonian heath's undeclared zinnia 08/13/1955 @ 15:47 -> 08/14/1955 @ 06:57 |Agglomerations wire Prescott's Mexicali extremer 09/18/1956 @ 21:45 -> 09/21/1956 @ 14:34 |Vouched Woodrow's 01/28/1957 @ 02:11 -> 01/28/1957 @ 07:56 |Intolerable cheekiness's reorganized blustering 05/13/1957 @ 17:09 -> 05/15/1957 @ 21:05 |Preferential blobbed Na 09/13/1957 @ 09:37 -> 09/16/1957 @ 11:59 |Reflexive 01/07/1958 @ 04:17 -> 01/07/1958 @ 18:53 |Slaver's bewared 05/13/1958 @ 09:54 -> 05/18/1958 @ 05:05 |Gentlest madcaps recaptures vestibule's 01/14/1959 @ 17:00 -> 01/18/1959 @ 19:12 |Stepchildren 05/21/1959 @ 23:01 -> 05/24/1959 @ 10:46 |Tailwind's preaches dappling ventricle's 07/19/1959 @ 10:37 -> 07/22/1959 @ 14:24 |Slingshot Cognac's insulate 01/03/1960 @ 05:18 -> 01/06/1960 @ 02:14 |Wren's carcinoma's jellied plateau engine's 03/06/1960 @ 21:51 -> 03/07/1960 @ 13:27 |Assessor cigar Bridges mutiny's freezing 04/13/1960 @ 20:14 -> 04/15/1960 @ 05:02 |Rios Hormel's 11/28/1960 @ 20:04 -> 11/28/1960 @ 22:29 |Sporran's extraordinaries Scotsmen findings 12/24/1960 @ 01:08 -> 12/27/1960 @ 20:51 |Meadows Alfredo valentine 08/01/1961 @ 08:23 -> 08/01/1961 @ 14:11 |Pavlova's misogynist munch instability temps 08/01/1962 @ 05:08 -> 08/03/1962 @ 15:28 |Betrothals Sexton's At's winced pilings 08/10/1962 @ 00:32 -> 08/10/1962 @ 07:04 |Quadruplets Karl dicks 03/13/1963 @ 06:02 -> 03/17/1963 @ 16:26 |Revitalization's Estelle's term 03/13/1963 @ 12:23 -> 03/14/1963 @ 21:32 |Moss executors 11/17/1963 @ 04:36 -> 11/21/1963 @ 00:04 |Overdid glassware charioteered 05/18/1964 @ 08:46 -> 05/20/1964 @ 21:54 |Demonstrated Shaffer's bobbling 07/13/1964 @ 18:48 -> 07/15/1964 @ 03:11 |Wingspans positing 07/20/1964 @ 06:56 -> 07/20/1964 @ 22:49 |Gizzard's galvanizing 09/09/1965 @ 20:38 -> 09/11/1965 @ 07:58 |Locomotion 01/18/1966 @ 00:24 -> 01/18/1966 @ 05:11 |Vamoose Madeira bishopric misstatement's 08/07/1966 @ 13:43 -> 08/12/1966 @ 08:03 |Parallelled penned samba's positron 08/23/1966 @ 09:52 -> 08/24/1966 @ 14:31 |Scrapes Cameroon's attorney Garbo's 09/24/1966 @ 03:39 -> 09/26/1966 @ 06:34 |Theater hosted condescend 02/22/1967 @ 22:10 -> 02/24/1967 @ 16:39 |Crossness Angelina's 09/09/1967 @ 10:23 -> 09/13/1967 @ 14:27 |Conservatory's crestfallen pluralized ornamental 10/26/1967 @ 01:46 -> 10/29/1967 @ 11:17 |Accelerated 02/10/1968 @ 11:09 -> 02/14/1968 @ 02:02 |Factions Sharpe's 05/08/1968 @ 06:25 -> 05/09/1968 @ 16:11 |Nesselrode's hiss preached shebangs 06/04/1969 @ 02:13 -> 06/04/1969 @ 10:49 |Wavelet 06/04/1969 @ 02:18 -> 06/09/1969 @ 05:29 |Dike's daylight's subtotalling indignation 06/07/1969 @ 22:31 -> 06/10/1969 @ 16:15 |Sex's seaway witch's vagina's 11/15/1969 @ 19:40 -> 11/17/1969 @ 14:24 |Hullabaloos brute's Fern's Milken's 01/23/1970 @ 18:06 -> 01/27/1970 @ 15:14 |Cowpoke's irrelevance 07/20/1970 @ 18:04 -> 07/23/1970 @ 22:25 |Undergrad's gondolas 11/02/1970 @ 15:52 -> 11/05/1970 @ 00:19 |Venting Shoshone's mockingbird fondly 11/15/1970 @ 23:51 -> 11/17/1970 @ 06:04 |Leftovers 11/30/1970 @ 20:13 -> 12/05/1970 @ 21:53 |Rhapsodizes protuberances whiplashes 06/02/1971 @ 01:13 -> 06/03/1971 @ 19:30 |Arbitration's 08/25/1971 @ 20:19 -> 08/27/1971 @ 19:16 |Consequently 11/15/1971 @ 06:06 -> 11/15/1971 @ 17:09 |Undercharging denseness acquitted arsonists euthanasia's 01/24/1972 @ 11:48 -> 01/28/1972 @ 20:16 |Ballsiest janitor 05/05/1972 @ 07:27 -> 05/05/1972 @ 09:42 |Molders saddening tenaciously Pruitt 09/28/1972 @ 07:26 -> 10/01/1972 @ 13:48 |Yank Armstrong skull's 10/19/1972 @ 11:35 -> 10/21/1972 @ 18:55 |Sadat billowed canvasser walrus Anabaptist 10/19/1972 @ 17:12 -> 10/22/1972 @ 05:39 |Clocks chance twiggiest cobra's sparest 10/26/1972 @ 19:47 -> 10/29/1972 @ 10:51 |Fibulae 04/13/1973 @ 23:53 -> 04/17/1973 @ 11:55 |Desalinated Kirby 06/22/1973 @ 06:55 -> 06/24/1973 @ 20:44 |Gibed conduit 10/05/1973 @ 05:46 -> 10/08/1973 @ 09:47 |Merriam Babel's Noreen pesetas 01/05/1974 @ 22:10 -> 01/06/1974 @ 10:56 |Busters scenic detoxified unfamiliar 01/15/1974 @ 10:29 -> 01/20/1974 @ 05:05 |Butterfly's examine unplugs sprucer dictations 01/24/1974 @ 05:57 -> 01/25/1974 @ 08:56 |Hefner's Marie's Mafias putt's enquiring 02/06/1974 @ 14:33 -> 02/10/1974 @ 18:59 |Issuance's lassoed beasts breakfasted confusingly 11/23/1974 @ 21:06 -> 11/24/1974 @ 12:30 |Squadron's 06/18/1975 @ 01:01 -> 06/23/1975 @ 08:17 |Trolleys Cameron pianist spelt southwestern 09/18/1975 @ 23:43 -> 09/19/1975 @ 09:11 |Unbuckles misfitted Cheshire disgracing 05/21/1976 @ 02:28 -> 05/23/1976 @ 09:35 |Premised graduations 07/31/1976 @ 21:40 -> 08/05/1976 @ 00:55 |Suffocation healthfulness rallied amulets satisfactorily 09/27/1976 @ 09:04 -> 09/30/1976 @ 09:21 |Adheres disintegrated harpoon's marooning peg 12/18/1976 @ 03:04 -> 12/21/1976 @ 02:02 |Pooching cuttlefishes imposture thorny 01/11/1977 @ 08:14 -> 01/13/1977 @ 09:51 |Landlords gabbles builder's laureating 03/09/1977 @ 01:24 -> 03/12/1977 @ 16:59 |Potboiler idiomatically 03/21/1977 @ 00:47 -> 03/21/1977 @ 17:00 |Deducible mailer Consuelo winging chameleon 12/09/1977 @ 20:35 -> 12/13/1977 @ 15:44 |Sosa swings 03/24/1978 @ 11:32 -> 03/27/1978 @ 17:26 |Wars Gregorio 02/13/1979 @ 20:48 -> 02/16/1979 @ 08:19 |Fidgets liquoring syphilis 03/15/1979 @ 07:42 -> 03/18/1979 @ 20:29 |Parking shoestrings disharmony's lassie 06/22/1979 @ 18:16 -> 06/26/1979 @ 11:16 |Stieglitz indiscreet visions buntings watchtower 08/20/1979 @ 12:01 -> 08/25/1979 @ 02:19 |Flushest Nate listen 11/20/1980 @ 17:22 -> 11/25/1980 @ 02:19 |Probability's inflexible mes sluggards 01/07/1981 @ 20:55 -> 01/09/1981 @ 23:19 |Flange internee inspector's 03/31/1981 @ 18:26 -> 04/05/1981 @ 07:44 |Sextets commits expectant 07/20/1982 @ 14:09 -> 07/23/1982 @ 21:59 |Vauban 10/12/1982 @ 08:50 -> 10/16/1982 @ 20:45 |Maltreated emulates popularize 10/25/1982 @ 07:17 -> 10/27/1982 @ 08:53 |Homeboy Velázquez Caesarean Mobil's Cheyenne's 12/13/1982 @ 22:30 -> 12/19/1982 @ 01:55 |Trellises binned hanky's Eurasia's destinies 12/31/1982 @ 01:21 -> 01/02/1983 @ 17:36 |Gyration's antiperspirant's 06/20/1983 @ 12:23 -> 06/24/1983 @ 17:32 |Deerskin 07/07/1983 @ 23:24 -> 07/11/1983 @ 02:42 |Gunnysacks heiress's cantons chase Polynesia's 11/01/1983 @ 23:44 -> 11/05/1983 @ 21:00 |Alexander cashier rays lackey filaments 11/16/1983 @ 21:22 -> 11/17/1983 @ 06:34 |Deflects reprinting flotillas marksmen haughtiness 01/01/1984 @ 23:49 -> 01/03/1984 @ 12:56 |Dissolutes Mobile's Ramsay's 02/11/1984 @ 18:24 -> 02/11/1984 @ 19:51 |Liqueur's lauds plighted 12/18/1985 @ 13:45 -> 12/19/1985 @ 02:48 |Filled pyrotechnics apostolic disorders 02/06/1986 @ 12:52 -> 02/06/1986 @ 16:07 |Concentric defense's 05/17/1986 @ 03:08 -> 05/21/1986 @ 01:12 |Render 12/18/1986 @ 02:38 -> 12/18/1986 @ 19:00 |Touchdowns Emory Doubleday's 12/24/1986 @ 11:06 -> 12/29/1986 @ 06:49 |Pontiffs horsewomen 01/03/1987 @ 23:12 -> 01/05/1987 @ 21:09 |Wraparounds tittling azimuth's 04/28/1987 @ 21:52 -> 05/03/1987 @ 12:14 |Commentary 08/03/1987 @ 21:11 -> 08/05/1987 @ 12:00 |Pinafore 10/30/1987 @ 22:05 -> 11/01/1987 @ 09:32 |Scourges 11/10/1987 @ 20:57 -> 11/15/1987 @ 22:00 |Orchards 12/20/1987 @ 08:50 -> 12/25/1987 @ 12:25 |Scapula's remounted scientist's Bonaventure 01/03/1988 @ 07:50 -> 01/07/1988 @ 15:22 |Idiom's propriety's averaging 07/07/1988 @ 13:29 -> 07/08/1988 @ 16:32 |Bushelled 09/11/1988 @ 04:09 -> 09/12/1988 @ 08:42 |Confrontational Olin's hoppers cede 12/20/1988 @ 13:08 -> 12/25/1988 @ 18:58 |Handouts that's 12/22/1988 @ 00:37 -> 12/27/1988 @ 07:42 |Uptight Greta's embellishment candider inquisitively 04/03/1989 @ 21:28 -> 04/04/1989 @ 16:15 |Klondiked undergoes plagiarize immediate 04/07/1989 @ 16:08 -> 04/10/1989 @ 16:16 |Flickers manly scrawniest commitments impeaches 05/05/1989 @ 03:46 -> 05/07/1989 @ 11:48 |Caesura's teeters rainy Neva 05/24/1990 @ 04:53 -> 05/27/1990 @ 12:13 |Mamma's bullshit's agglutinating 11/19/1990 @ 01:05 -> 11/21/1990 @ 11:00 |Krasnodar nick Jewell's 11/19/1990 @ 20:16 -> 11/25/1990 @ 02:42 |Boomed 08/30/1991 @ 00:12 -> 09/02/1991 @ 04:26 |Elwood soups motherhood's 10/25/1991 @ 14:11 -> 10/29/1991 @ 02:31 |Tyrannizing 05/19/1992 @ 04:00 -> 05/19/1992 @ 20:21 |Linkage ebbing naval aspect's unfailing 07/10/1992 @ 23:56 -> 07/12/1992 @ 17:03 |Vying 10/17/1992 @ 03:20 -> 10/19/1992 @ 13:54 |Hal aster roadway gristly 12/28/1992 @ 02:03 -> 12/30/1992 @ 13:21 |Sharks length's 02/05/1994 @ 23:07 -> 02/10/1994 @ 19:24 |Ameba's rested 07/15/1994 @ 13:55 -> 07/19/1994 @ 03:34 |Comically 09/18/1994 @ 23:20 -> 09/22/1994 @ 20:30 |Modeling Troy vixen's articulating evolutionary 10/27/1995 @ 03:19 -> 10/29/1995 @ 10:55 |Hindered collapse marched emphasis's 06/26/1996 @ 18:41 -> 06/30/1996 @ 02:34 |Hear peephole's 04/07/1997 @ 23:10 -> 04/10/1997 @ 06:55 |Folio's 06/12/1997 @ 16:27 -> 06/16/1997 @ 18:19 |Instantaneously toast's agreements warp 06/19/1997 @ 08:37 -> 06/24/1997 @ 06:56 |Undefined weeder sophism's allegory's sandpapers 07/21/1997 @ 12:35 -> 07/24/1997 @ 23:14 |Collided passerby sextants landlocked prudish 08/09/1997 @ 15:38 -> 08/12/1997 @ 05:17 |Transfixt Udall numbing subvert 09/08/1997 @ 23:21 -> 09/11/1997 @ 02:18 |Debbie Bolshevist ending 05/04/1998 @ 11:27 -> 05/06/1998 @ 17:19 |Optimism Arcturus's effectuating ratcheted 09/07/1998 @ 05:25 -> 09/12/1998 @ 03:42 |Deliriums 01/10/1999 @ 05:11 -> 01/13/1999 @ 02:03 |Holographs Rambo's 02/03/1999 @ 05:07 -> 02/07/1999 @ 02:36 |Louisianans jimmying artistes leased 05/20/1999 @ 03:37 -> 05/21/1999 @ 17:01 |Freeholder's 10/01/1999 @ 05:42 -> 10/04/1999 @ 04:09 |Notepaper's Abernathy's 11/17/1999 @ 19:43 -> 11/21/1999 @ 22:14 |Suicidal shirtwaist 12/19/1999 @ 18:55 -> 12/20/1999 @ 20:30 |Libellers 10/19/2000 @ 22:39 -> 10/20/2000 @ 04:55 |Plodder's moulting smokestacks instruments vagrancy's 05/30/2001 @ 10:07 -> 06/01/2001 @ 22:58 |Bulimia yank 12/02/2001 @ 22:03 -> 12/06/2001 @ 10:51 |Serviettes 01/24/2002 @ 09:14 -> 01/29/2002 @ 06:28 |Biddy 06/02/2002 @ 06:15 -> 06/05/2002 @ 15:12 |Thermoplastic Monroe's atrocity's Brandy's demoralizes 09/20/2002 @ 05:40 -> 09/24/2002 @ 21:32 |Guinevere's inspired limitation's 12/12/2002 @ 23:48 -> 12/14/2002 @ 04:07 |Disconcerted Osage observational 12/31/2002 @ 19:41 -> 01/01/2003 @ 12:21 |Tithes gig's 03/02/2003 @ 02:20 -> 03/03/2003 @ 21:24 |Editor's hazels epiglottises repercussion 03/23/2003 @ 20:46 -> 03/26/2003 @ 23:11 |Planter's Gambia Vietnamese 08/27/2003 @ 03:52 -> 08/30/2003 @ 10:56 |Dossier's MacArthur 01/11/2004 @ 15:57 -> 01/15/2004 @ 19:29 |Spindliest 05/10/2004 @ 09:21 -> 05/12/2004 @ 22:19 |Abrupt upbeats 05/14/2004 @ 17:37 -> 05/15/2004 @ 10:39 |Ordure's 07/02/2004 @ 20:21 -> 07/05/2004 @ 06:23 |Respectful superhighway 07/03/2004 @ 15:53 -> 07/03/2004 @ 17:39 |Magdalena unzip modernest Shapiro's Guerra 09/15/2005 @ 05:22 -> 09/19/2005 @ 02:03 |Newsed tarpons Boniface jocular 05/29/2006 @ 11:54 -> 06/03/2006 @ 02:31 |Sunsetting 02/17/2007 @ 18:09 -> 02/21/2007 @ 11:20 |Zorn centennial Domitian's nations overwrites 04/03/2007 @ 10:23 -> 04/04/2007 @ 04:01 |Humerus's organdy's Borobudur's escapist evaluations 05/17/2007 @ 05:37 -> 05/18/2007 @ 10:26 |Tallow's woodcarving Beijing potables 07/28/2007 @ 00:10 -> 07/31/2007 @ 00:52 |Dispirits composting willies hygrometers presaged 03/04/2008 @ 07:26 -> 03/06/2008 @ 18:45 |Deformation boggling brooms Episcopals trademarking 09/20/2008 @ 13:10 -> 09/25/2008 @ 09:28 |Recombining mantilla's lisped revisits 07/11/2009 @ 11:18 -> 07/14/2009 @ 12:43 |Sclerosis 08/17/2009 @ 01:46 -> 08/20/2009 @ 15:21 |Awkward 08/21/2009 @ 14:26 -> 08/22/2009 @ 08:26 |Defender's Chengdu cashew's Regor Deanne's 02/25/2010 @ 10:25 -> 02/27/2010 @ 05:20 |Optimums Hafiz's 07/15/2010 @ 08:43 -> 07/16/2010 @ 15:41 |Cyanide 07/20/2010 @ 11:56 -> 07/22/2010 @ 20:21 |Croup commode's geographical Ferber's Aguilar's 02/22/2011 @ 11:23 -> 02/26/2011 @ 07:21 |Covenants useful smoker's 06/15/2011 @ 05:21 -> 06/20/2011 @ 05:07 |Formative blissful experimentation's 07/14/2011 @ 09:43 -> 07/17/2011 @ 23:13 |Opens Tutankhamen's 04/02/2012 @ 03:57 -> 04/03/2012 @ 00:10 |Reexamines mugger's zephyr's morn's 04/07/2012 @ 16:05 -> 04/10/2012 @ 07:50 |Transpiration's sellout bleeds infusions spent 01/01/2013 @ 11:53 -> 01/05/2013 @ 21:24 |Rectum's charged cucumbers bashes outpatient's 02/10/2013 @ 21:23 -> 02/16/2013 @ 00:05 |Montezuma hairpins insetting Kochab's 08/19/2013 @ 18:34 -> 08/19/2013 @ 22:38 |Meteoroids 08/25/2013 @ 18:11 -> 08/29/2013 @ 13:50 |Lobotomy's quicksand familiarize Syracuse intermediary 04/22/2014 @ 23:15 -> 04/25/2014 @ 08:47 |Eastman vomited policemen fallacy adverbs 06/28/2014 @ 05:11 -> 07/02/2014 @ 10:33 |Bellyful's apportions 10/07/2014 @ 23:24 -> 10/12/2014 @ 00:19 |Misgoverned 01/15/2015 @ 15:38 -> 01/19/2015 @ 04:48 |Electrocutes cob truncates intrigued 05/28/2015 @ 07:38 -> 05/29/2015 @ 04:49 |Remount fragrance's 06/24/1912 [1] Flurry's docks courteously McKinley's apse's 07/01/1912 [1] Abrogates fraud's empty 07/16/1912 [1] Truckles vicissitudes 09/07/1943 [1] Transplant philologist's 04/29/1944 [1] Debases ammunition's fructifying tatty localing 08/02/1944 [1] Rescinds 10/29/1944 [1] Ascension's eighths democrat's wailing 01/14/1945 [1] Bevelling 08/01/1945 [1] Mortgagee doctrines robe's valedictories hermaphrodites 10/25/1945 [1] Amplitude's punctuating extraditing Mulroney 10/28/1945 [1] Canteens 06/10/1946 [1] Vows 03/30/1947 [1] Beaumont's Rothko 04/13/1947 [1] Jimmy derivation topographical evoking 09/14/1947 [1] Ga 04/30/1948 [1] Capitalization's flutist's 06/21/1948 [1] Besieger's spasmed Alcatraz's 08/13/1948 [1] Kaboom 10/26/1948 [1] Mummifying 02/02/1949 [1] Gadding Syria's 03/08/1949 [1] Unbridled Omayyad peacemaker's holocaust's 10/18/1949 [1] Sewing's juror trusted patrimony's 10/31/1949 [1] Cheever lily aerospace's fluffs 02/03/1950 [1] Congratulate legendary renovations unison's suburbanite 01/02/1951 [1] Savorier libertarians 01/21/1951 [1] Package uptown missive sphere moreover 03/07/1951 [1] Inmate mortgagee's stings 04/19/1951 [1] Borobudur's Clinton's censor 07/11/1951 [1] Lens Marcella's delimiter southerner's 07/31/1951 [1] Cockerel's 01/24/1952 [1] Mississauga Popper trachea's 05/10/1952 [1] Paroxysm flashiness's 07/19/1952 [1] Alcyone's temerity reclaimed Segre's soloing 09/17/1952 [1] Propaganda humanism Louisianians 11/10/1952 [1] Harper's mantissa's nautiluses 12/15/1952 [1] Brueghel's buddy Batista offensiveness 01/09/1953 [1] Visage Methodist Pontianak's 02/07/1953 [1] Roquefort's 07/13/1953 [1] Gandhian parsecs biathlon's reinstated 07/25/1953 [1] Depot carboy's unbosom 08/09/1953 [1] Gullet neighbor indelicacies 02/05/1954 [1] Drains defacement's 06/17/1954 [1] Virulently restrained 07/28/1954 [1] Sup soggy radishes Kinko 11/26/1954 [1] Firetrap's Ethernet 12/21/1954 [1] Airlifted womankind's Suetonius pities repatriation 12/22/1954 [1] Maurine Fanny's 02/06/1955 [1] Asphalt Aurora squidded pawnbroker leeward 02/20/1956 [1] Falter 09/06/1956 [1] Bisquick gimpiest imperialist 03/29/1957 [1] Conservators Coriolanus's 08/31/1957 [1] Socking parallaxes wellsprings kickiest escapades 11/08/1957 [1] Miniaturizing jail 11/21/1957 [1] Flintiest poplin's Clemson 08/13/1958 [1] Stiffen Swedenborg Hungarians 09/16/1958 [1] About stabilizing causals hesitates Bacardi's 12/21/1958 [1] Seymour Minnesotans qualms grungiest 04/21/1959 [1] Rime departing 05/21/1959 [1] Sectioning subleased Crecy's sloppiest 09/17/1959 [1] Beacon annuities pollywog's 11/21/1959 [1] Decency choreographers 06/21/1960 [1] Rosendo stipulates painter's 10/03/1960 [1] Convocations Klimt haft overstuffed whereon 12/10/1960 [1] Buber's habitual unholiest slue 03/27/1961 [1] Suffragists ova's marathoners creamery's 08/31/1961 [1] Cheesecake's pelts deicer normalcy 11/28/1961 [1] Nebula aureole's dictatorship's 06/13/1962 [1] Wire's pained 07/19/1962 [1] Salacious outskirt cloakroom's 10/21/1962 [1] Matricide's Underwood's 12/04/1962 [1] Sickness smudgiest legmen 08/04/1963 [1] McKnight's 09/04/1963 [1] Praised meltdowns Somalis 12/20/1963 [1] Instrumented Cordelia 05/22/1964 [1] Macedonian Bloomingdale's 06/27/1964 [1] Propagated basement 10/22/1964 [1] Yerevan's stinting teak apostate registrants 12/15/1964 [1] Whaler ants blooding vogue leopards 01/02/1965 [1] Accumulated Lucretia's Himalaya's driveway 03/24/1965 [1] Letha's 09/15/1965 [1] Plumes sensuous exigencies 12/08/1965 [1] Console 01/28/1966 [1] Samples preventible 02/08/1966 [1] Unpronounceable presuppose 03/15/1966 [1] Nominating comma cohered Catullus networking 05/06/1966 [1] Offenbach compatible insight redistrict 06/17/1966 [1] Antagonized kickers jockstrap's Minolta's 10/23/1966 [1] Copacabana 12/09/1966 [1] Uninterrupted handmaids incalculably flatly 12/30/1966 [1] Glimmerings relocatable differentiation Chesterfield's charcoal's 04/16/1967 [1] Vendor's exhausted Essie's rod 07/17/1967 [1] Squirrelled 07/20/1967 [1] Circumnavigation wackos gays inert nonuser 08/28/1967 [1] Trays Toltec's habituation 02/13/1968 [1] Murmuring sextons publisher's Ur's 04/13/1968 [1] Conduces 05/23/1968 [1] Protoplasm Afghan's 09/04/1968 [1] Castor's blarneyed 09/29/1968 [1] Wideness payees Shylock's Wycherley's smallest 01/08/1969 [1] Ageism debased gore excursion's 01/11/1969 [1] Dalian's brashness's deciding plagiarized Senior 01/19/1969 [1] Telecommutes Verdun's tonsillectomy 02/02/1969 [1] Croatia rococo's Cuvier's acknowledgment's 02/17/1969 [1] Closet drooled rollicking Amsterdam's Hegira 03/14/1969 [1] Uric Brazilian consult sweatiest 04/15/1969 [1] Struggle Blankenship's outcroppings 07/17/1969 [1] Meaner Martial 12/16/1969 [1] Skunk safekeepings canapé extraneous Brandeis's 03/17/1970 [1] Score 03/24/1970 [1] Macerate Isis brakeman Poltava 07/18/1970 [1] Menstruate bottled 12/16/1970 [1] Frothed dialog 12/28/1970 [1] Anther 01/29/1971 [1] Handicapper reversals 05/17/1971 [1] Aquinas 12/06/1971 [1] Loot lighthearted blindsiding Cleopatra tasty 04/12/1972 [1] Sponges prosperity's noncooperation 06/12/1972 [1] Stoplights vane's patients 06/14/1972 [1] Declaims fretting dissatisfaction's 09/24/1972 [1] Ravishing vulgarizes 10/19/1972 [1] Superiority's baptistery's antedate 11/07/1972 [1] Malignant duckbills mites peroxide's 10/19/1973 [1] Squishiest avalanches lark's muezzin's 01/21/1974 [1] Bismark's 02/03/1974 [1] Kyushu websites exhortation Melba's automaton's 05/09/1974 [1] Jehoshaphat albino overkilling Desdemona's 07/05/1974 [1] Tanked genitive 11/12/1974 [1] Cautiousness calamines lithium's fervidly chaperone's 01/15/1975 [1] Wringer unblocked audio's 02/18/1975 [1] Kebab's disarm Dramamine whittler lassitude's 04/21/1975 [1] Maroons loan's waist's daffodil 09/18/1975 [1] Hickey undetermined spray 12/23/1975 [1] Subordinating Cathay shambles 09/04/1976 [1] Silks blaze 10/27/1976 [1] Venturesome revoking debit 10/29/1976 [1] Inge scherzo's 12/28/1976 [1] Psychopath's unsure 01/23/1977 [1] Ally homographs raccoon's transubstantiation 02/08/1977 [1] Executable jiggles pickup reanimating grommet's 06/28/1977 [1] Politicized crape 08/30/1977 [1] Stylist's spooking Krupp's waterbeds gadfly 09/20/1977 [1] Ito's kegging resoundingly lore's 02/12/1978 [1] Cocky wasting menaces 05/06/1978 [1] Nurserymen keened acidifies Buford's 09/20/1978 [1] Rectifier's 09/22/1978 [1] Florine's gymnasia 02/06/1980 [1] Overreaches suborbital Madeleine 05/19/1980 [1] Overstatement synergy's 08/24/1980 [1] Efface herbicide Ramiro's 09/20/1980 [1] Unlikely testify Trondheim's 09/25/1980 [1] Jingoist's 03/26/1981 [1] Traverse 04/30/1981 [1] Settee's 05/09/1981 [1] Exhortations jelly's cabal 05/29/1981 [1] Extruding moseyed effusions auditor 07/21/1981 [1] Tobacco hypocrisy's slacks 08/05/1981 [1] Gabon's collying pays 11/11/1981 [1] Pickerel aboding aptness Poland 01/24/1982 [1] Farm's 02/03/1982 [1] Pantyhose 02/10/1982 [1] Knopf's Rachelle's Opel's innovation 02/17/1982 [1] Undergarments Elnora's 03/11/1982 [1] Husserl's Cd occurrences Jill's 10/14/1982 [1] Flamingo Sèvres selfsame disavowing 07/15/1983 [1] Electromagnetic implication's attachment's demagogue plighted 11/19/1983 [1] Nocturne 01/19/1984 [1] Deputation 06/05/1984 [1] Breaching Calvinists actuality's advertisement baritones 06/29/1984 [1] Miscalculated diluted 10/16/1984 [1] Ionosphere contiguity noisiness's 02/28/1985 [1] Mac requires corona mending's carpenters 05/28/1985 [1] Sandbox processor's overdraft's 12/15/1985 [1] Spruce 01/04/1986 [1] Atherosclerosis reinvents legerdemain's notation's 02/16/1986 [1] Narcissist 05/31/1986 [1] Fun jetting marquis felicity decathlon's 09/22/1986 [1] Bellhops June's bushing 12/20/1986 [1] Cockeyed weekending Chartres 01/30/1987 [1] Cornrowing heartburn's Lynn's cup resin 04/24/1987 [1] Guyana Punjabi's roisterer 07/11/1987 [1] Copped contract knacker's 07/19/1987 [1] Fencer's birthmark's reconstruct compellingly dissipates 10/03/1987 [1] Arden continents 12/04/1987 [1] Towns 01/20/1988 [1] Impetuously seeing's 08/18/1988 [1] Abhorrent cranial Cato surplice 09/12/1988 [1] Undecipherable Esperanza's 09/02/1989 [1] Imitations 12/22/1989 [1] Transmigrate 02/18/1990 [1] Precedence JFK distributing 06/21/1990 [1] Azimuth exhibits 08/30/1990 [1] Horsetails Heinlein's 12/14/1990 [1] Annoyances valuation 03/06/1991 [1] Knob delimit 05/21/1991 [1] Patriarchies churns vulcanized 01/25/1992 [1] Rag's province warding 12/08/1992 [1] Calking Thurmond's 05/07/1993 [1] Sledged sextants chance's 09/29/1993 [1] Masaryk diminuendo's Bond Moor's Bran's 10/04/1993 [1] Farthest sticklers chutes ragouts 10/16/1993 [1] Marcella Lindbergh firmware covers 06/03/1994 [1] Humps racier teat's cross stencil 08/20/1994 [1] Griffin's coauthor's 05/14/1995 [1] Curs nerdiest 02/29/1996 [1] Moo deviants snares overgrow 11/25/1996 [1] Pleasantries endears Wharton's encroaches 03/23/1997 [1] Kenneling G retorting branching's art 07/07/1997 [1] Shillelagh keens tritely Rodin's 11/12/1997 [1] Taklamakan 12/14/1997 [1] Speakeasies lashing's cancellations Boleyn's 05/04/1998 [1] Resplendently dose insufficiency's day's 05/24/1998 [1] Expeditionary 08/29/1998 [1] Deleted richer Japura's whetstone's 11/02/1998 [1] Truncating reproof's restating dignity's chi's 11/07/1998 [1] Meaty bubbles establishing versification 12/20/1998 [1] Gladlier friendliest 03/20/1999 [1] Floating consonant's hobbyhorse's Tahiti scimitar 05/30/1999 [1] Raid insulation colorfully mandibles 04/07/2000 [1] Chapping bequeaths satellites 05/17/2000 [1] Her Peron gavels footbridge's bacchanal's 07/10/2000 [1] Leaved mime's saltwater 08/04/2000 [1] Margins charting edgy personae 01/25/2001 [1] Accurateness hoed flakiness's 02/26/2001 [1] Toolboxes circularized 12/08/2001 [1] Overspill's Waikiki's cowlicks redirecting 08/06/2003 [1] Carbide's downscales glamorized geometrical mitten 09/01/2003 [1] Pedagoguing doll's outlet's 01/15/2004 [1] Communities packers pinch 06/21/2004 [1] Rush's 07/03/2004 [1] Chariot Hornblower's 11/09/2004 [1] Unforgivable exhorting demolish irrecoverable clearing 11/21/2004 [1] Silicone 12/07/2004 [1] Rheumier easiest Andrew's abbots 04/10/2005 [1] Cindy's palette gnash 10/19/2005 [1] Mazes 03/13/2006 [1] Midwinter unobstructed Ginger's incumbents 06/08/2006 [1] Eulogistic decoding groveling Alcibiades plankton 06/27/2006 [1] Randomizes berthing hurdles 07/21/2006 [1] Montaigne's reverie's niceness beats goading 08/19/2006 [1] Northerner rebuffing impalas rooftops 09/27/2006 [1] Cargo reversion Khan's Episcopalian semicircle 08/24/2007 [1] Elucidations ritzy panting 04/30/2008 [1] Accountability 10/06/2008 [1] Cosponsor chored 11/24/2008 [1] Wizard's Galahad's 12/17/2008 [1] Incivility erratically Hermite 02/14/2009 [1] Harpsichord mortgagers oldened 02/14/2009 [1] Pliers Suzanne Johns Olga's tripling 03/13/2009 [1] Environmentalist malts toxicology's Gadsden's 03/25/2009 [1] Administered warranty whirling 09/18/2009 [1] Methanol ilks 12/08/2009 [1] Poetic cadre abasement campground's extinguish 02/26/2010 [1] Maturer wantoning 08/16/2010 [1] Esau's brainchildren 08/21/2010 [1] Agreeably Brigham's misalignment 11/12/2010 [1] Humidified Rockford's keynote churlish 02/25/2011 [1] Socket ghastlier 04/10/2011 [1] Detrimental 05/05/2011 [1] Access imbibe 09/02/2011 [1] Gorgas flaunts parched 12/28/2011 [1] Collaboration Tenochtitlan's rapscallion psychologist's extincting 05/20/2012 [1] Trots lorry 06/03/2012 [1] Hoorayed assignment 06/11/2012 [1] Ah drifter's 04/26/2013 [1] Donald's 07/19/2013 [1] Woodcutter sanctimonious nightfall's crews 03/03/2014 [1] Uncoupling cabarets gondolier's 08/22/2014 [1] Pelleted discrepancies 10/15/2014 [1] Fizzling 03/14/2015 [1] Damneder poking markdown quagmire's 01/10/2016 [1] Hireling spellers 08/30/2016 [1] Gaffe's shrinks 10/01/2016 [1] Plenipotentiaries snooker calcified fileting Bessemer's 12/18/2016 [1] Acidity vaults 02/24/2017 [1] Psyched Sondra's 03/12/2017 [1] Nark sacristan's 04/06/2017 [1] Titanium 06/22/2017 [1] Tub grenadier's longing's gram's 08/19/2017 [1] Twaddling 06/07/2018 [1] Uppity 06/28/2018 [1] Retarded Ginsburg's nonce's 12/17/2018 [1] Succored desperadoes ascend 03/02/2019 [1] Silence Joy's keener consciousnesses 04/07/2019 [1] Beck's Ariosto's 04/30/2019 [1] Stepsister's 08/25/2020 [1] Ideas Gershwin 11/07/2020 [1] Slackening slovenlier reel 11/12/2020 [1] Oration's 12/29/2020 [1] Keep 03/02/2021 [1] Stockyard's consummation equivocates 03/31/2021 [1] Irruptions blatant Monteverdi's medicinals Woolworth 04/18/2021 [1] Assailing 08/08/2021 [1] Interfaith overwhelmingly afflicts posteriors Erasmus's 04/03/2022 [1] Inundating yuckiest technician tetrahedron's foresails 08/15/2022 [1] Heralded F stroked 10/09/2022 [1] Sixes unafraid decoded 11/28/2022 [1] Stupefied blips 06/26/2023 [1] Supplicate Terri 10/11/2023 [1] Boyishness's intuitive cask's Armageddon's 06/21/2024 [1] Sepulcher Bacall 06/27/2024 [1] Slivering 08/05/2024 [1] Dempsey's Intel's 04/04/2025 [1] Directorate inoffensive 04/25/2025 [1] Waddle saintliness's Mercia's denseness 05/15/2025 [1] Intensity hydrology Peel power 11/19/2025 [1] Wingspans affluence's 02/20/2026 [1] Dicky impersonator 03/20/2026 [1] Boneless rilling 05/11/2026 [1] Carnations nigger's 11/17/2026 [1] Barrios slicker's thirty's 03/26/2027 [1] Dizziest Kerry Ndjamena's pizzicato 04/06/2027 [1] Parenthetical chemotherapy 10/02/2027 [1] Provender's limericks 03/21/2028 [1] Dent nape's unevener irradiated denizen's 03/23/2028 [1] Tailgated gawkiness's 05/07/2028 [1] Elope hammerings complexioned 07/15/2028 [1] Describe hooter Surat's paramedicals 09/11/2028 [1] Inc videotaped sixteenth eyeliner 09/12/2028 [1] Resend sake sundries rumbaing 11/03/2029 [1] Blisters willful 11/07/2029 [1] Mascaraing assertive vulnerably pruned 11/30/2029 [1] O'Hara wrench elm 01/08/2030 [1] Cashier's sherbet earwax's stiffeners 05/07/2030 [1] Compatibles Joyner asynchronous 07/01/2030 [1] Empire's entwine 03/25/2031 [1] Proverbially unwarranted effectiveness 04/16/2031 [1] Nosedives pennon's disburse scalloping 07/01/2031 [1] Surrealist guppy unabated Gwendoline 07/21/2031 [1] Casting's carelessness Anselmo's 10/03/2031 [1] Autos 11/09/2031 [1] Cockscomb's 12/18/2031 [1] Succumb Key's Cossacks blackness 01/24/2032 [1] Sidelined yell 01/31/2032 [1] Thebes determining glutting manorial Barbra 04/27/2032 [1] Cringing Osborne 05/26/2032 [1] Confine lames 08/03/2032 [1] Ceremonial straw's antelope's Mercer Kathiawar's 01/01/1902 [1] Swastikas seeking 01/01/1902 [1] Elongate wallpaper's midterms classify 01/01/1902 [1] Seedy locoweed persecutor 01/01/1902 [1] Acidifies flack's evaporating 01/01/1902 [1] Aniakchak Pantagruel 01/01/1902 [1] Imperishables 01/01/1902 [1] Stuff hysteresis 01/01/1902 [1] Area 01/01/1902 [1] Brandished eyrie cloying emcees 01/01/1902 [1] Exceptionable 01/01/1902 [1] Acanthi kinked hardtack's mumps 01/01/1902 [1] Cesspool's murdered cod's Washingtonians 01/01/1902 [1] Snow 01/01/1902 [1] Kibitz subcontinent hogwash's displaying quarto 01/01/1902 [1] Mischievousness's species adultery's petrochemicals Remus 01/01/1902 [1] Insecure Taiyuan Chungking's Tm's 01/01/1902 [1] Minuscules pompadours fourfold incognito 01/01/1902 [1] Geography's Delaney's 01/01/1902 [1] Skilled bastardized dormers Buckingham munitions 01/01/1902 [1] Also 01/01/1902 [1] Marquis's 01/01/1902 [1] Malamud's 01/01/1902 [1] Gilda 01/01/1902 [1] Roe's apace disinfectants metered spinals 01/01/1902 [1] Locals goutiest Gomulka's 01/01/1902 [1] Surgery's apple covertly 01/01/1902 [1] Shantung Earlene pillage leer complainant's 01/01/1902 [1] Bach's 01/01/1902 [1] Luisa's Chimborazo's shuffleboard's 01/01/1902 [1] Tiffed Garcia Elton's 01/01/1902 [1] Peculiarities Jewishnesses attenuate 01/01/1902 [1] Wallpapered tampers Dhaka transgression's alohas 01/01/1902 [1] Roam psycho's 01/01/1902 [1] Automobiles beguiles 01/01/1902 [1] Dumfounds medial lark's 01/01/1902 [1] Haggler's ablative safeguard 01/01/1902 [1] Broomsticks 01/01/1902 [1] Therapist cooker's flutes He's 01/01/1902 [1] Bonny strode Pasteur's inconsequentially Gamble's 01/01/1902 [1] Corporate 01/01/1902 [1] Lina's 01/01/1902 [1] Kodachrome wicks callus's Genaro's 01/01/1902 [1] Brokers horsefly repudiating knob 01/01/1902 [1] Reflecting championing stringent Talmudic 01/01/1902 [1] Noncommercial employes 01/01/1902 [1] Competitively 01/01/1902 [1] Garish duplicator edible battery's mock 01/01/1902 [1] Flocks subornation's trawlers naming's 01/01/1902 [1] Gruffness Gethsemane 01/01/1902 [1] Absalom humankind editorship 01/01/1902 [1] Ampule's Orinoco's nontransferable misspends 01/01/1902 [1] Each Moselle's discussants flashlight's 01/01/1902 [1] Electron's reproaches picker grayer 01/01/1902 [1] Armrests Jamestown's nuke's motif undertaker 01/01/1902 [1] Navigation's 01/01/1902 [1] Pearl's Morin telescopes Emanuel's 01/01/1902 [1] Mutating postnatal Tate familiarize discomfort 01/01/1902 [1] Offsets debits 01/01/1902 [1] Institutes's Canton susceptibility's hankie's 01/01/1902 [1] Haleakala's Goldie's Set 01/01/1902 [1] Hypocrite's bridal populars 01/01/1902 [1] Lankiness 01/01/1902 [1] Rinds weekdays 01/01/1902 [1] Win hydrangea's display pelvic yukking 01/01/1902 [1] Homer's strafes 01/01/1902 [1] Rigor's sociopaths bashing outwore catalepsy 01/01/1902 [1] Montaigne loophole 01/01/1902 @ 00:01 -> 01/02/1902 @ 09:18 |Calibrator's 01/01/1902 @ 05:03 -> 01/06/1902 @ 02:46 |Refresh prepackaged wieners 01/01/1902 @ 01:58 -> 01/06/1902 @ 07:39 |Strontium's 01/01/1902 @ 06:11 -> 01/01/1902 @ 10:15 |Abets reject pullbacks finaglers unroll 01/01/1902 @ 02:55 -> 01/01/1902 @ 17:43 |Monterrey apprehensive Lonnie's 01/01/1902 @ 03:19 -> 01/03/1902 @ 16:25 |Gill machination geranium's fathomless extraordinary 01/01/1902 @ 06:15 -> 01/02/1902 @ 06:07 |Protruded vanguard 01/01/1902 @ 02:31 -> 01/01/1902 @ 13:18 |Expo 01/01/1902 @ 06:11 -> 01/05/1902 @ 10:50 |Placebos hugeness flailing ironing's 01/01/1902 @ 07:40 -> 01/02/1902 @ 23:52 |Septembers astuter Jarvis caliper 01/01/1902 @ 06:51 -> 01/05/1902 @ 07:33 |Asthma 01/01/1902 @ 09:01 -> 01/04/1902 @ 14:26 |Monograph's 01/01/1902 @ 00:37 -> 01/01/1902 @ 00:53 |Portal's Leach's Sara Asiatic Holly 01/01/1902 @ 02:05 -> 01/02/1902 @ 00:41 |Yesteryear's 01/01/1902 @ 06:52 -> 01/05/1902 @ 13:44 |Colluding steamrolled 01/01/1902 @ 06:28 -> 01/06/1902 @ 07:57 |Incubuses flat prison Ryukyu's 01/01/1902 @ 06:04 -> 01/02/1902 @ 09:50 |Synods 01/01/1902 @ 05:17 -> 01/01/1902 @ 20:13 |Eucalyptus's Araby 01/01/1902 @ 04:12 -> 01/02/1902 @ 11:28 |Superstitious 01/01/1902 @ 03:07 -> 01/02/1902 @ 14:53 |Chanted pumice's scalding prier 01/01/1902 @ 01:26 -> 01/05/1902 @ 11:35 |Beethoven materialism signposting bucktoothed 01/01/1902 @ 05:31 -> 01/02/1902 @ 11:34 |Isolated affair ritual's Hanukkahs Riel 01/01/1902 @ 03:26 -> 01/02/1902 @ 15:16 |Supernumeraries incontrovertibly embolden iterate 01/01/1902 @ 07:17 -> 01/05/1902 @ 00:07 |Federals spanner 01/01/1902 @ 07:02 -> 01/03/1902 @ 22:41 |Unzipped earthing alleyways bankers 01/01/1902 @ 08:24 -> 01/03/1902 @ 20:18 |Diesel ferrules Valkyrie's 01/01/1902 @ 03:32 -> 01/01/1902 @ 04:06 |Winch 01/01/1902 @ 09:01 -> 01/04/1902 @ 09:21 |Smartens promulgates uncharted McIntosh's 01/01/1902 @ 00:59 -> 01/05/1902 @ 04:39 |Ho Nikolayev succumbing observances 01/01/1902 @ 07:03 -> 01/02/1902 @ 11:52 |Kiwanis's Iceland 01/01/1902 @ 08:13 -> 01/03/1902 @ 07:30 |Bawdily anviled crayfishes neuters 01/01/1902 @ 01:46 -> 01/01/1902 @ 18:09 |Blenheim 01/01/1902 @ 01:02 -> 01/04/1902 @ 12:06 |Posse overspreads psalm lamebrain's primps 01/01/1902 @ 02:16 -> 01/04/1902 @ 13:18 |Sass organism's horses Melanesian 01/01/1902 @ 09:01 -> 01/03/1902 @ 04:00 |Commons's 01/01/1902 @ 06:16 -> 01/05/1902 @ 05:33 |Bungle head radiation's 01/01/1902 @ 03:31 -> 01/03/1902 @ 05:20 |Psycho's 01/01/1902 @ 06:58 -> 01/03/1902 @ 02:04 |Nomadic Gewürztraminer overrules 01/01/1902 @ 07:25 -> 01/02/1902 @ 11:22 |Crematory amorphousness 01/01/1902 @ 08:18 -> 01/04/1902 @ 11:42 |Charity's 01/01/1902 @ 05:19 -> 01/04/1902 @ 22:02 |Fronde petrochemical's capitalistic 01/01/1902 @ 02:09 -> 01/02/1902 @ 14:02 |Concurs windowed 01/01/1902 @ 03:20 -> 01/03/1902 @ 10:01 |Condillac 01/01/1902 @ 04:28 -> 01/02/1902 @ 09:33 |Carrie cued melodramatics 01/01/1902 @ 06:55 -> 01/02/1902 @ 03:06 |Ferocity 01/01/1902 @ 08:42 -> 01/01/1902 @ 20:57 |Simenon Kojak amening plagiarist 01/01/1902 @ 08:30 -> 01/05/1902 @ 02:27 |Marshall 01/01/1902 @ 05:38 -> 01/03/1902 @ 22:47 |Hokkaido's diseases 01/01/1902 @ 07:21 -> 01/02/1902 @ 04:40 |Senility's 01/01/1902 @ 03:29 -> 01/03/1902 @ 23:54 |Albumin altimeters Senghor's 01/01/1902 @ 04:46 -> 01/03/1902 @ 12:02 |Lynnette Zane kimono's backlash 01/01/1902 @ 05:32 -> 01/04/1902 @ 23:07 |Interfaced Hepplewhite slipped 01/01/1902 @ 07:28 -> 01/02/1902 @ 19:34 |Discretion bauble varsity's 01/01/1902 @ 06:18 -> 01/05/1902 @ 02:47 |Damned 01/01/1902 @ 01:43 -> 01/04/1902 @ 22:12 |Doting 01/01/1902 @ 03:23 -> 01/03/1902 @ 12:31 |Access Yang bethinks vectored broad 01/01/1902 @ 02:50 -> 01/03/1902 @ 20:32 |Tasseled 01/01/1902 @ 06:52 -> 01/03/1902 @ 10:06 |Ventriloquist's indisputable squats Fenian's slowdown's 01/01/1902 @ 06:31 -> 01/04/1902 @ 21:25 |Learning 01/01/1902 @ 00:44 -> 01/01/1902 @ 14:29 |Blondes Sasquatch cablecasted 01/01/1902 @ 06:16 -> 01/04/1902 @ 20:13 |Papillae hairpin ailerons 01/01/1902 @ 00:22 -> 01/02/1902 @ 11:54 |Menses enrichment afloat failed incorruptible 01/01/1902 @ 08:13 -> 01/01/1902 @ 17:50 |Motown's factors disappearing 01/01/1902 @ 08:40 -> 01/06/1902 @ 04:00 |Observable parleys industrialization Cambrian boxwood's 01/01/1902 @ 04:56 -> 01/03/1902 @ 00:14 |Summer Mujib humbles fatherless foretelling 01/01/1902 @ 00:08 -> 01/02/1902 @ 20:46 |Binnacles 01/01/1902 @ 04:38 -> 01/03/1902 @ 00:50 |Packard's 01/01/1902 @ 08:49 -> 01/03/1902 @ 12:10 |Hypnotist reappraisal rehiring Castaneda 01/01/1902 @ 02:26 -> 01/06/1902 @ 03:30 |Jataka backwards 01/01/1902 @ 00:07 -> 01/05/1902 @ 01:15 |Zeno Goldberg's Iberia's truants coiffured 01/01/1902 @ 00:59 -> 01/04/1902 @ 19:16 |Lounges 01/01/1902 @ 00:05 -> 01/03/1902 @ 13:11 |Heisenberg Jewries hookier misfortunes auspiciousness 01/01/1902 @ 08:02 -> 01/01/1902 @ 11:59 |District 01/01/1902 @ 02:54 -> 01/05/1902 @ 06:18 |Grin menstruation's calcurse-4.0.0/test/data/apts-appointment-0220000644000175000017500000000006612273003161015651 0000000000000002/23/2013 @ 10:00 -> 02/22/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/apts-event-0050000644000175000017500000000002512273003161014430 0000000000000002/23/2013 [.] Event calcurse-4.0.0/test/data/apts-appointment-0110000644000175000017500000000006612273003161015647 0000000000000002/23/2013 @ 10.00 -> 02/23/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/apts-appointment-0100000644000175000017500000000006612273003161015646 0000000000000002/23/2013 . 10:00 -> 02/23/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/apts-appointment-0040000644000175000017500000000006612273003161015651 0000000000000002/22/2013 @ 10:00 -> 02/23/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/ical-004.ical0000644000175000017500000000033712472326722014202 00000000000000BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT DTSTART:19800101T000100 DURATION:P1DT9H17M0S SUMMARY:Calibrator's END:VEVENT BEGIN:VTODO PRIORITY:1 SUMMARY:Nary parabled Louvre's fleetest mered END:VTODO END:VCALENDAR calcurse-4.0.0/test/data/apts-appointment-0210000644000175000017500000000006612273003161015650 0000000000000002/23/2013 @ 10:00 -> 02/23/2013 @ 08:00 |Appointment calcurse-4.0.0/test/data/todo0000644000175000017500000001373512273003161013021 00000000000000[7] Wheeling predictor aggrieve dentist's vegetable [-8] Stine's Napier's [9] Gloriously slams [-6] Reigning [5] Television [3] Aladdin ancestoring matzohs [-8] Holloway's turnip's [1] Nary parabled Louvre's fleetest mered [-7] Josef heir's flake [-4] Spins Mondrian's velveteen [-7] Phone's backrest's [2] Surgical handlers fodder Crimea [-1] Finality surging studentship inversely terry [-3] Knitwear's cruet [-6] Scalper board coalescence's speedsters Tabatha's [6] Apprehend domino Olivier's [7] Acid bicepses magnetizing Trotsky's [-9] Tugboat warrantying [4] Restrictive Gresham clinch thunderhead [1] Stench's approximates torus's gymnast's [-5] Sixteen's [-6] Pear bauble clemency's heartbreaks compresses [-8] Bytes asters [2] Freebasing Oppenheimer [8] Secessionists Keogh's [-6] Mass analog's Pharaoh's sensationalists [-7] Dissidence [4] Unbuttoned horsemen beggar's commander Griffin [-6] Computations Yangtze slowpokes sourly bearskin's [2] Finesses Sebastian's nightclubbed [6] Rectangle mascots examiner blah screechy [-3] Electrolyte equities infrastructure's [2] Daydreamed [5] Globed [-2] Stores shamefaced slithering [5] Reverend [7] Proposed trespassed Bultmann [3] Maui [7] Restarts poisoner's Patterson's bucktooth [3] Dislodged washboard inhabitant's [5] Unsafer ingenuousness's supine [-4] Ripeness's nirvana [-7] Invigorating desserts copy's abbé [-5] Shorthorns straddle carbons [6] Lading [-2] Drawling secretary's [6] Ransom tablet [3] Unbarring [1] Uncorks aggression's Charmaine [-1] Donor's mummers dunning [-4] Leafiest tomcats crematoria Teletypes quires [-7] Koshered numismatics's [3] Wavelet's anapests flan [8] Stroke farmyard's deterrent urned [-6] Gunsmiths [8] Chileans smirk footholds [4] Erasmus pawnshop unmasked Andromache transgression's [4] Heighten squirted [-7] Hoodwinks Hector Playboy's fizzy [1] Fillmore's ricks Federico kiloton's steamy [5] Thor songwriters hookup [-1] Chatty [-6] Insensitivity shrill vainly Schindler's installs [1] Originality channeled romantically [-2] Advil [9] Beefburger's [2] Chorals incurred rediscovery's dioxide's firstly [8] Designed breach salarying [1] Phantom's Tagore [-4] Harriet worlds [5] Thereby [-2] Edgewise [8] Pleasanter [1] Kindness redundant [5] Soto's thrones tracing's [-2] Jenner's cymbal's [8] Surreals Zachery demonstrative athlete's [-9] Roommate [-1] Amening Hofstadter's excellently [-4] Refining wildest [2] Sudan's Ger's [3] Yukon's expletives [6] Cox foretold electroencephalogram gargoyle individualizing [6] Speedier buzzer Natalia [2] Sphinx telepathy's [1] Nahum run debauches chambers [-7] Extortion cacophonies [4] Maharajas [3] Virtuosi incompatible [7] Timex's Semarang undercarriage gladiator [-6] Meditates choreographing [-2] Indianapolis career [-8] Sensuality's pushover's bookkeeper's democrat's Establishment's [-7] Sputtering Liz gentle [8] Consonances wounding petties confessors blaze's [-8] Pentateuch's acquiting clumsiest [4] Angstrom [7] Watson sepsis's depoliticizing wried La's [-6] Terrapins [9] Seasons [-5] Bumpier drolly Sallust maws [1] Overstayed [-9] Sheer [6] Arrayed jewelling [8] Distrusted crinkly tels [8] Wilier allegro dine dead [-3] Sores brokerage prerecorded Clifton's [8] Anyone Rowena's rumbled [-1] Chairlift's abstruse Baikal mattresses dowry's [5] Diaz's disrespected washtub's [6] Eisner's conditioning [-7] Ape's [-9] Flirts provocative Liechtenstein mozzarella butterfat's [3] Homeopathy triennials potteries ovoid [2] Perpetrators hypnotize Iliad's personalizes dike [5] Olympia's Esperanto's [2] Receptors instil unripe [7] Groggier [-9] Journalists [-8] Creator [2] Brownsville [-2] Breadwinner sulfides [-7] Canoe impenetrable scrolled [4] Figurehead's nurture [7] Colombia Brahe's Johnston's spectacle jailors [-5] Strawberries syllogism [-1] Skimping brotherliness underscoring provendered [-2] Augment Husserl's unselfishness apostle [-2] Angle manipulates [-8] Other attempts [-6] Cook's scouring eh perimeter tomahawked [1] Metropolises leg's ultimated inseminating minaret's [2] Streptomycin's characterization's mercies entry's montage [1] Hooky niggards [-8] Embroidered Burton's cleave [1] Sharon preponderances hostessing inimitable [8] Briefcase [-9] Sparta's reappraisals whiniest Jocasta's curator's [-9] Becalm careers carotids [4] Inundate [6] Butchery piling's infomercial [3] Delineated [5] Unfinished surfs [-8] Recourse's [-6] Airtight overshot contest's ostentation [8] Roadshow bit's confection pastors wenches [-2] Saussure unselfish [-3] Guy insulation's maria's [7] Observers [-2] Decomposition's registry inboards crowbars [-1] Dahomey's facilitation's [-8] Ehrlich laced countertenor's convergence's choices [-2] Crochet [1] Defiance's cliffhangers battery [6] Multiplex [6] Springfield directs framer's empties [-3] Blunderbuss's [-4] Flusters allegiance's [-5] Trawled [5] Carrousels Avalon's [7] Constantine's ladings [-1] Regencies requires monkeyshines pornographic [7] Trolling [1] Promontory's mutts silk disc's foot [8] Vibrating [-8] Homeyness hibernates sambas fierceness's [8] Noise's quadruplicating multimedia Lyell [3] Equilaterals shes minibuses nudity consolidates [6] Hernia coccyges Orlon's Nirenberg [-2] Soakings Armagnac sexuality's homelier pests [7] Peso chalk's abiding [-6] Portraiture littoral leavening [-9] Boatman fleetingly radiator [3] Sissy husks [-7] Swearers gauntlets deepness acclaims stimulate [-1] Comedown [-9] Jubal's [1] Town vigor alphabetical concluded [-2] Baroda gazpacho's jolliness resupplies [-9] Asked [3] Chandrasekhar's gunfire's Earp's [-3] Bickering's shorts eagerness [-6] Ambiances Gagarin's milksops gargle [-5] Rainforest rediscovered Bohemia [-3] Syntactics smokehouses downward Quirinal reoccupy [-9] Succored sweetbriers [-4] Profess dismemberment fly syndicate [-4] Billeting [-9] Streetwalker's [4] Haberdashery's rates tentative eBay's McCoy [-3] Al's butterflying ovulate recitatives lumbered [2] Eye treads Eng's Peron baize [3] Podded [-9] Plunderer heightened spindlier transiting [-7] Pared [-5] Blueprint's gemstone's ceremony anteater's [3] Quarters calcurse-4.0.0/test/data/ical-006.ical0000644000175000017500000000211312472326722014176 00000000000000BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT SUMMARY:5 hours DTSTART:20120601T150000 DURATION:PT5H END:VEVENT BEGIN:VEVENT SUMMARY:5 hours DTSTART:20120601T150000 DURATION:PT5H0M END:VEVENT BEGIN:VEVENT SUMMARY:5 hours DTSTART:20120601T150000 DURATION:PT5H0S END:VEVENT BEGIN:VEVENT SUMMARY:5 hours DTSTART:20120601T150000 DURATION:PT5H0M0S END:VEVENT BEGIN:VEVENT SUMMARY:30 minutes DTSTART:20120601T150000 DURATION:PT30M END:VEVENT BEGIN:VEVENT SUMMARY:30 minutes DTSTART:20120601T150000 DURATION:PT0H30M END:VEVENT BEGIN:VEVENT SUMMARY:30 minutes DTSTART:20120601T150000 DURATION:PT30M0S END:VEVENT BEGIN:VEVENT SUMMARY:30 minutes DTSTART:20120601T150000 DURATION:PT0H30M0S END:VEVENT BEGIN:VEVENT SUMMARY:5 hours and 30 minutes DTSTART:20120601T150000 DURATION:PT5H30M END:VEVENT BEGIN:VEVENT SUMMARY:5 hours and 30 minutes DTSTART:20120601T150000 DURATION:PT5H30M0S END:VEVENT BEGIN:VEVENT SUMMARY:5 hours and 10 seconds DTSTART:20120601T150000 DURATION:PT5H10S END:VEVENT BEGIN:VEVENT SUMMARY:5 hours, 30 minutes and 10 seconds DTSTART:20120601T150000 DURATION:PT5H30M10S END:VEVENT END:VCALENDAR calcurse-4.0.0/test/data/ical-003.ical0000644000175000017500000000114512472326533014177 00000000000000BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT DTSTART:20000101T000000 DURATION:PT1H30M0S RRULE:FREQ=DAILY;INTERVAL=2;UNTIL=20000201T000000;WKST=SU EXDATE:20000115T000000,20000123T000000 SUMMARY:Recurring appointment END:VEVENT BEGIN:VEVENT DTSTART:20000101T000000 DURATION:PT1H30M0S RRULE:FREQ=WEEKLY;INTERVAL=1;UNTIL=20000201T000000;WKST=SU EXDATE:20000122T000000 SUMMARY:Weekly appointment END:VEVENT BEGIN:VEVENT DTSTART:20000201T000000 DURATION:PT1H30M0S RRULE:FREQ=DAILY;INTERVAL=2;UNTIL=20000301T000000;WKST=SU EXDATE:20000215T000000 EXDATE:20000223T000000 SUMMARY:Recurring appointment END:VEVENT END:VCALENDAR calcurse-4.0.0/test/data/apts-appointment-0180000644000175000017500000000006612273003161015656 0000000000000002/23/2013 @ 10:00 -> 02/23/2013 @ 12.00 |Appointment calcurse-4.0.0/test/data/apts-event-0060000644000175000017500000000002512273003161014431 0000000000000002/23/2013 [1. Event calcurse-4.0.0/test/data/apts-appointment-0190000644000175000017500000000006612273003161015657 0000000000000002/23/2013 @ 10:00 -> 02/23/2013 @ 24:00 |Appointment calcurse-4.0.0/test/data/apts-appointment-0130000644000175000017500000000006612273003161015651 0000000000000002/23/2013 @ 10:00 .> 02/23/2013 @ 12:00 |Appointment calcurse-4.0.0/test/data/apts-event-0040000644000175000017500000000002512273003161014427 0000000000000002/23/2013 .1] Event calcurse-4.0.0/test/data/apts-appointment-0200000644000175000017500000000006612273003161015647 0000000000000002/23/2013 @ 10:00 -> 02/23/2013 @ 12:00 .Appointment calcurse-4.0.0/test/event-001.sh0000755000175000017500000000040312365427602013176 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-event-001" \ -d02/23/2013 elif [ "$1" = 'expected' ]; then cat < ..:.. Covenants useful smoker's EOD else ./run-test "$0" fi calcurse-4.0.0/test/day-002.sh0000755000175000017500000000133412365427602012637 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ ! -x "$(command -v faketime)" ]; then echo "libfaketime not found - skipping $0..." exit 0 fi if [ "$1" = 'actual' ]; then faketime -f '1912-06-23 00:00:00' "$CALCURSE" --read-only -D "$DATA_DIR"/ \ -d42 elif [ "$1" = 'expected' ]; then cat < ..:.. Impersonating integer broils blame 07/11/12: - ..:.. -> ..:.. Impersonating integer broils blame 07/12/12: - ..:.. -> ..:.. Impersonating integer broils blame 07/13/12: - ..:.. -> 03:18 Impersonating integer broils blame 07/16/12: * Truckles vicissitudes EOD else ./run-test "$0" fi calcurse-4.0.0/test/event-003.sh0000755000175000017500000000031212365427602013177 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-event-003" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'date error in event' errors rm -f errors calcurse-4.0.0/test/todo-001.sh0000755000175000017500000000043612365427602013030 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -t | sort elif [ "$1" = 'expected' ]; then ( echo 'to do:' sed '/^\[-/d; s/^\[\([0-9]\)\] \(.*\)/\1. \2/' "$DATA_DIR"/todo ) | sort else ./run-test "$0" fi calcurse-4.0.0/test/event-004.sh0000755000175000017500000000032512365427602013204 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-event-004" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'no event nor appointment found' errors rm -f errors calcurse-4.0.0/test/recur-003.sh0000755000175000017500000000072712365427602013210 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-recur" \ -d01/01/2001 --format-recur-apt='' elif [ "$1" = 'expected' ]; then cat <errors && exit 1 grep -Fq 'syntax error in the item date' errors rm -f errors calcurse-4.0.0/test/appointment-008.sh0000755000175000017500000000033212365427602014423 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-008" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'syntax error in the item date' errors rm -f errors calcurse-4.0.0/test/Makefile.am0000644000175000017500000000452612472326722013266 00000000000000AUTOMAKE_OPTIONS = foreign TESTS = \ true-001.sh \ run-test-001.sh \ run-test-002.sh \ todo-001.sh \ todo-002.sh \ todo-003.sh \ day-001.sh \ day-002.sh \ day-003.sh \ range-001.sh \ range-002.sh \ range-003.sh \ appointment-001.sh \ appointment-002.sh \ appointment-003.sh \ appointment-004.sh \ appointment-005.sh \ appointment-006.sh \ appointment-007.sh \ appointment-008.sh \ appointment-009.sh \ appointment-010.sh \ appointment-011.sh \ appointment-012.sh \ appointment-013.sh \ appointment-014.sh \ appointment-015.sh \ appointment-016.sh \ appointment-017.sh \ appointment-018.sh \ appointment-019.sh \ appointment-020.sh \ appointment-021.sh \ appointment-022.sh \ event-001.sh \ event-002.sh \ event-003.sh \ event-004.sh \ event-005.sh \ event-006.sh \ filter-001.sh \ ical-001.sh \ ical-002.sh \ ical-003.sh \ ical-004.sh \ ical-005.sh \ ical-006.sh \ next-001.sh \ search-001.sh \ bug-002.sh \ recur-001.sh \ recur-002.sh \ recur-003.sh \ recur-004.sh \ recur-005.sh TESTS_ENVIRONMENT = \ TEST_INIT='$(top_srcdir)/test/test-init.sh' \ CALCURSE='$(top_builddir)/src/calcurse' \ DATA_DIR='$(top_srcdir)/test/data/' AM_CFLAGS = -std=c99 -pedantic -D_POSIX_C_SOURCE=200809L check_PROGRAMS = run-test check_SCRIPTS = test-init.sh noinst_SCRIPTS = $(check_SCRIPTS) run_test_SOURCES = run-test.c EXTRA_DIST = \ $(TESTS) \ test-init.sh \ data/apts \ data/apts-appointment-002 \ data/apts-appointment-003 \ data/apts-appointment-004 \ data/apts-appointment-005 \ data/apts-appointment-006 \ data/apts-appointment-007 \ data/apts-appointment-008 \ data/apts-appointment-009 \ data/apts-appointment-010 \ data/apts-appointment-011 \ data/apts-appointment-012 \ data/apts-appointment-013 \ data/apts-appointment-014 \ data/apts-appointment-015 \ data/apts-appointment-016 \ data/apts-appointment-017 \ data/apts-appointment-018 \ data/apts-appointment-019 \ data/apts-appointment-020 \ data/apts-appointment-021 \ data/apts-appointment-022 \ data/apts-bug-002 \ data/apts-event-001 \ data/apts-event-002 \ data/apts-event-003 \ data/apts-event-004 \ data/apts-event-005 \ data/apts-event-006 \ data/apts-filter-001 \ data/apts-recur \ data/conf \ data/ical-001.ical \ data/ical-002.ical \ data/ical-003.ical \ data/ical-004.ical \ data/ical-005.ical \ data/ical-006.ical \ data/todo calcurse-4.0.0/test/appointment-022.sh0000755000175000017500000000032612365427602014422 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-022" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'date error in appointment' errors rm -f errors calcurse-4.0.0/test/bug-002.sh0000755000175000017500000000047512365427602012644 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-bug-002" \ -d05/03/2012 elif [ "$1" = 'expected' ]; then cat < 12:45 Quantum Mechanics - 18:30 -> 21:30 German Class EOD else ./run-test "$0" fi calcurse-4.0.0/test/test-init.sh0000644000175000017500000000011512356766231013500 00000000000000#!/bin/sh CALCURSE=${CALCURSE:-../src/calcurse} DATA_DIR=${DATA_DIR:-data/} calcurse-4.0.0/test/run-test-002.sh0000755000175000017500000000023212365427602013637 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then echo 23 elif [ "$1" = 'expected' ]; then echo 42 else ./run-test "!$0" fi calcurse-4.0.0/test/search-001.sh0000755000175000017500000000075112365427602013330 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ ! -x "$(command -v faketime)" ]; then echo "libfaketime not found - skipping $0..." exit 0 fi if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -s01/01/1902 -r36500 \ -S '^[KMS]an.*or' elif [ "$1" = 'expected' ]; then cat < ..:.. Manuel glorified four 12/07/42: - ..:.. -> 04:33 Manuel glorified four 05/28/85: * Sandbox processor's overdraft's EOD else ./run-test "$0" fi calcurse-4.0.0/test/appointment-017.sh0000755000175000017500000000034212365427602014424 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-017" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'syntax error in item time or duration' errors rm -f errors calcurse-4.0.0/test/range-003.sh0000755000175000017500000000060212365427602013154 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ ! -x "$(command -v faketime)" ]; then echo "libfaketime not found - skipping $0..." exit 0 fi if [ "$1" = 'actual' ]; then faketime -f '2000-01-01 00:00:00' "$CALCURSE" --read-only -D "$DATA_DIR"/ \ -r400 elif [ "$1" = 'expected' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -s01/01/2000 -r400 else ./run-test "$0" fi calcurse-4.0.0/test/true-001.sh0000755000175000017500000000006212365427602013035 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" true calcurse-4.0.0/test/appointment-001.sh0000755000175000017500000000062612365427601014421 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ ! -x "$(command -v faketime)" ]; then echo "libfaketime not found - skipping $0..." exit 0 fi if [ "$1" = 'actual' ]; then faketime -f '2011-02-25 23:42:00' "$CALCURSE" --read-only -D "$DATA_DIR" -a elif [ "$1" = 'expected' ]; then cat < ..:.. Covenants useful smoker's EOD else ./run-test "$0" fi calcurse-4.0.0/test/run-test.c0000644000175000017500000001226712472326722013160 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include #include #include #include /* * Fork and execute an external process. * * If pfdin and/or pfdout point to a valid address, a pipe is created and the * appropriate file descriptors are written to pfdin/pfdout. */ static int fork_exec(int *pfdin, int *pfdout, const char *path, char *const *arg) { int pin[2], pout[2]; int pid; if (pfdin && (pipe(pin) == -1)) return 0; if (pfdout && (pipe(pout) == -1)) return 0; if ((pid = fork()) == 0) { if (pfdout) { if (dup2(pout[0], STDIN_FILENO) < 0) _exit(127); close(pout[0]); close(pout[1]); } if (pfdin) { if (dup2(pin[1], STDOUT_FILENO) < 0) _exit(127); close(pin[0]); close(pin[1]); } execvp(path, arg); _exit(127); } else { if (pfdin) close(pin[1]); if (pfdout) close(pout[0]); if (pid > 0) { if (pfdin) { fcntl(pin[0], F_SETFD, FD_CLOEXEC); *pfdin = pin[0]; } if (pfdout) { fcntl(pout[1], F_SETFD, FD_CLOEXEC); *pfdout = pout[1]; } } else { if (pfdin) close(pin[0]); if (pfdout) close(pout[1]); return 0; } } return pid; } /* Wait for a child process to terminate. */ static int child_wait(int *pfdin, int *pfdout, int pid) { int stat; if (pfdin) close(*pfdin); if (pfdout) close(*pfdout); waitpid(pid, &stat, 0); return stat; } /* Print error message and bail out. */ static void die(const char *format, ...) { va_list arg; va_start(arg, format); fprintf(stderr, "error: "); vfprintf(stderr, format, arg); va_end(arg); exit(1); } /* Print usage message. */ static void usage(void) { printf("usage: run-test [-h|--help] ...\n"); } /* Run test with a specific name. */ static int run_test(const char *name, int expect_failure) { char filename[BUFSIZ]; char *arg1[3], *arg2[3]; int pid1 = -1, pin1, pid2 = -1, pin2; FILE *fpin1 = NULL, *fpin2 = NULL; char buf1[BUFSIZ], buf2[BUFSIZ]; int ret = 1; if (snprintf(filename, BUFSIZ, "./%s", name) >= BUFSIZ) die("file name too long\n"); if (access(filename, F_OK) != 0) { if (snprintf(filename, BUFSIZ, "./%s.sh", name) >= BUFSIZ) die("file name too long\n"); if (access(filename, F_OK) != 0) die("test not found: %s\n", name); } if (access(filename, X_OK) != 0) die("script is not executable: %s\n", filename); arg1[0] = arg2[0] = filename; arg1[1] = "expected"; arg2[1] = "actual"; arg1[2] = arg2[2] = NULL; printf("Running %s...", name); if ((pid1 = fork_exec(&pin1, NULL, *arg1, arg1)) < 0) die("failed to execute %s: %s\n", filename, strerror(errno)); if ((pid2 = fork_exec(&pin2, NULL, *arg2, arg2)) < 0) die("failed to execute %s: %s\n", filename, strerror(errno)); fpin1 = fdopen(pin1, "r"); fpin2 = fdopen(pin2, "r"); while (fgets(buf1, BUFSIZ, fpin1)) { if (!fgets(buf2, BUFSIZ, fpin2) || strcmp(buf1, buf2) != 0) { ret = 0; break; } } if (fgets(buf2, BUFSIZ, fpin2)) ret = 0; if (fpin1) fclose(fpin1); if (fpin2) fclose(fpin2); if (child_wait(&pin1, NULL, pid1) != 0) ret = 0; if (child_wait(&pin2, NULL, pid2) != 0) ret = 0; if (expect_failure) ret = 1 - ret; if (ret == 1) printf(" ok\n"); else printf(" FAIL\n"); return ret; } int main(int argc, char **argv) { int i; if (!argv[1]) die("no tests specified, bailing out\n"); else if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) { usage(); return 0; } for (i = 1; i < argc; i++) { if (*argv[i] == '!') { if (!run_test(argv[i] + 1, 1)) return 1; } else { if (!run_test(argv[i], 0)) return 1; } } return 0; } calcurse-4.0.0/test/appointment-010.sh0000755000175000017500000000033312365427602014415 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-010" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'no event nor appointment found' errors rm -f errors calcurse-4.0.0/test/event-005.sh0000755000175000017500000000032612365427602013206 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-event-005" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'syntax error in item identifier' errors rm -f errors calcurse-4.0.0/test/day-003.sh0000755000175000017500000000060012365427602012633 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ ! -x "$(command -v faketime)" ]; then echo "libfaketime not found - skipping $0..." exit 0 fi if [ "$1" = 'actual' ]; then faketime -f '1912-06-23 00:00:00' "$CALCURSE" --read-only -D "$DATA_DIR"/ \ -d42 elif [ "$1" = 'expected' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -s06/23/1912 -r42 else ./run-test "$0" fi calcurse-4.0.0/test/recur-005.sh0000755000175000017500000000062712365427602013211 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-recur" \ -d01/10/2000 --format-recur-event='' elif [ "$1" = 'expected' ]; then cat < ..:.. Another recurrent appointment - ..:.. -> 02:00 Recurrent appointment - 00:00 -> ..:.. Third recurrent appointment EOD else ./run-test "$0" fi calcurse-4.0.0/test/appointment-006.sh0000755000175000017500000000043712365427602014427 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-006" \ -d02/23/2013 elif [ "$1" = 'expected' ]; then cat < 12:00 Appointment EOD else ./run-test "$0" fi calcurse-4.0.0/test/ical-003.sh0000755000175000017500000000374412472326533013002 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then mkdir .calcurse || exit 1 cp "$DATA_DIR/conf" .calcurse || exit 1 "$CALCURSE" -D "$PWD/.calcurse" -i "$DATA_DIR/ical-003.ical" "$CALCURSE" -D "$PWD/.calcurse" -s01/01/2000 -r365 rm -rf .calcurse || exit 1 elif [ "$1" = 'expected' ]; then cat < 01:30 Recurring appointment - 00:00 -> 01:30 Weekly appointment 01/03/00: - 00:00 -> 01:30 Recurring appointment 01/05/00: - 00:00 -> 01:30 Recurring appointment 01/07/00: - 00:00 -> 01:30 Recurring appointment 01/08/00: - 00:00 -> 01:30 Weekly appointment 01/09/00: - 00:00 -> 01:30 Recurring appointment 01/11/00: - 00:00 -> 01:30 Recurring appointment 01/13/00: - 00:00 -> 01:30 Recurring appointment 01/15/00: - 00:00 -> 01:30 Weekly appointment 01/17/00: - 00:00 -> 01:30 Recurring appointment 01/19/00: - 00:00 -> 01:30 Recurring appointment 01/21/00: - 00:00 -> 01:30 Recurring appointment 01/25/00: - 00:00 -> 01:30 Recurring appointment 01/27/00: - 00:00 -> 01:30 Recurring appointment 01/29/00: - 00:00 -> 01:30 Recurring appointment - 00:00 -> 01:30 Weekly appointment 01/31/00: - 00:00 -> 01:30 Recurring appointment 02/01/00: - 00:00 -> 01:30 Recurring appointment 02/03/00: - 00:00 -> 01:30 Recurring appointment 02/05/00: - 00:00 -> 01:30 Recurring appointment 02/07/00: - 00:00 -> 01:30 Recurring appointment 02/09/00: - 00:00 -> 01:30 Recurring appointment 02/11/00: - 00:00 -> 01:30 Recurring appointment 02/13/00: - 00:00 -> 01:30 Recurring appointment 02/17/00: - 00:00 -> 01:30 Recurring appointment 02/19/00: - 00:00 -> 01:30 Recurring appointment 02/21/00: - 00:00 -> 01:30 Recurring appointment 02/25/00: - 00:00 -> 01:30 Recurring appointment 02/27/00: - 00:00 -> 01:30 Recurring appointment 02/29/00: - 00:00 -> 01:30 Recurring appointment EOD else ./run-test "$0" fi calcurse-4.0.0/test/appointment-015.sh0000755000175000017500000000034212365427602014422 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-015" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'syntax error in item time or duration' errors rm -f errors calcurse-4.0.0/test/ical-004.sh0000755000175000017500000000114112472326722012770 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then mkdir .calcurse || exit 1 cp "$DATA_DIR/conf" .calcurse || exit 1 "$CALCURSE" -D "$PWD/.calcurse" -i "$DATA_DIR/ical-004.ical" "$CALCURSE" -D "$PWD/.calcurse" -s01/01/1980 -r2 "$CALCURSE" -D "$PWD/.calcurse" -t rm -rf .calcurse || exit 1 elif [ "$1" = 'expected' ]; then cat < ..:.. Calibrator's 01/02/80: - ..:.. -> 09:18 Calibrator's to do: 9. Nary parabled Louvre's fleetest mered EOD else ./run-test "$0" fi calcurse-4.0.0/test/appointment-021.sh0000755000175000017500000000032612365427602014421 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-021" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'date error in appointment' errors rm -f errors calcurse-4.0.0/test/ical-006.sh0000755000175000017500000000153412472326722013000 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then mkdir .calcurse || exit 1 cp "$DATA_DIR/conf" .calcurse || exit 1 "$CALCURSE" -D "$PWD/.calcurse" -i "$DATA_DIR/ical-006.ical" "$CALCURSE" -D "$PWD/.calcurse" -s06/01/2012 -r2 rm -rf .calcurse || exit 1 elif [ "$1" = 'expected' ]; then cat < 20:00 5 hours - 15:00 -> 20:00 5 hours - 15:00 -> 20:00 5 hours - 15:00 -> 20:00 5 hours - 15:00 -> 15:30 30 minutes - 15:00 -> 15:30 30 minutes - 15:00 -> 15:30 30 minutes - 15:00 -> 15:30 30 minutes - 15:00 -> 20:30 5 hours and 30 minutes - 15:00 -> 20:30 5 hours and 30 minutes - 15:00 -> 20:00 5 hours and 10 seconds - 15:00 -> 20:30 5 hours, 30 minutes and 10 seconds EOD else ./run-test "$0" fi calcurse-4.0.0/test/recur-004.sh0000755000175000017500000000062712365427602013210 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-recur" \ -d01/01/2000 --format-recur-event='' elif [ "$1" = 'expected' ]; then cat < ..:.. Another recurrent appointment - 00:00 -> ..:.. Third recurrent appointment - 16:00 -> ..:.. Recurrent appointment EOD else ./run-test "$0" fi calcurse-4.0.0/test/next-001.sh0000755000175000017500000000061312365427602013036 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ ! -x "$(command -v faketime)" ]; then echo "libfaketime not found - skipping $0..." exit 0 fi if [ "$1" = 'actual' ]; then faketime -f '1912-07-10 04:10:00' "$CALCURSE" --read-only -D "$DATA_DIR" -n elif [ "$1" = 'expected' ]; then cat <errors && exit 1 grep -Fq 'date error in appointment' errors rm -f errors calcurse-4.0.0/test/appointment-002.sh0000755000175000017500000000043712365427601014422 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-002" \ -d02/23/2013 elif [ "$1" = 'expected' ]; then cat < 12:00 Appointment EOD else ./run-test "$0" fi calcurse-4.0.0/test/range-001.sh0000755000175000017500000000062712365427602013161 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ ! -x "$(command -v faketime)" ]; then echo "libfaketime not found - skipping $0..." exit 0 fi if [ "$1" = 'actual' ]; then faketime -f '2011-02-25 00:00:00' "$CALCURSE" --read-only -D "$DATA_DIR"/ -r elif [ "$1" = 'expected' ]; then cat < ..:.. Covenants useful smoker's EOD else ./run-test "$0" fi calcurse-4.0.0/test/appointment-007.sh0000755000175000017500000000043712365427602014430 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-007" \ -d02/23/2013 elif [ "$1" = 'expected' ]; then cat < 12:00 Appointment EOD else ./run-test "$0" fi calcurse-4.0.0/test/event-006.sh0000755000175000017500000000032612365427602013207 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-event-006" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'syntax error in item identifier' errors rm -f errors calcurse-4.0.0/test/ical-001.sh0000755000175000017500000000114112472326722012765 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then mkdir .calcurse || exit 1 cp "$DATA_DIR/conf" .calcurse || exit 1 "$CALCURSE" -D "$PWD/.calcurse" -i "$DATA_DIR/ical-001.ical" "$CALCURSE" -D "$PWD/.calcurse" -s01/01/1980 -r2 "$CALCURSE" -D "$PWD/.calcurse" -t rm -rf .calcurse || exit 1 elif [ "$1" = 'expected' ]; then cat < ..:.. Calibrator's 01/02/80: - ..:.. -> 09:18 Calibrator's to do: 9. Nary parabled Louvre's fleetest mered EOD else ./run-test "$0" fi calcurse-4.0.0/test/filter-001.sh0000755000175000017500000000063612472326722013352 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-filter-001" \ -t9 -s02/23/2013 -r2 elif [ "$1" = 'expected' ]; then cat < 12:00 Appointment 2 02/24/13: * Event 3 - 10:00 -> 12:00 Appointment 3 EOD else ./run-test "$0" fi calcurse-4.0.0/test/appointment-014.sh0000755000175000017500000000034212365427602014421 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-014" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'syntax error in item time or duration' errors rm -f errors calcurse-4.0.0/test/run-test-001.sh0000755000175000017500000000020312365427602013634 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' -o "$1" = 'expected' ]; then echo 42 else ./run-test "$0" fi calcurse-4.0.0/test/todo-003.sh0000755000175000017500000000045312365427602013031 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -t0 | sort -n elif [ "$1" = 'expected' ]; then ( echo 'completed tasks:' sed -n 's/^\[-\([0-9]\)\] \(.*\)/\1. \2/p' "$DATA_DIR"/todo ) | sort -n else ./run-test "$0" fi calcurse-4.0.0/test/appointment-019.sh0000755000175000017500000000032612365427602014430 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-019" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'date error in appointment' errors rm -f errors calcurse-4.0.0/test/appointment-004.sh0000755000175000017500000000043712365427601014424 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-004" \ -d02/23/2013 elif [ "$1" = 'expected' ]; then cat < 12:00 Appointment EOD else ./run-test "$0" fi calcurse-4.0.0/test/README0000644000175000017500000001144512273003161012074 00000000000000calcurse Test Suite =================== This directory holds of a couple of test cases and some helpers to simplify the task of creating new tests. Test cases are intended to test a specified set of behaviors and to avoid reintroduction of bugs that have already been fixed. The idea is that a new test should be added for each bug report that is received and for each bug that is fixed in the development branch. Running tests ------------- The easiest way to run tests is running `make check`. This will prepare and compile all needed components and start all test cases. A summary is displayed when all tests are finished. You can also run tests manually. Test cases are usually shell scripts or binaries. To run an individual test, just invoke the corresponding executable. The `CALCURSE` and `DATA_DIR` environment variables can be used to specify an alternative calcurse binary and data directory. Passing another data directory might cause some failures since many tests are adapted for the `test/` directory provided by the test suite: $ CALCURSE=../src/calcurse DATA_DIR="$HOME/.calcurse/" ./next-001.sh Running ./next-001.sh... FAIL Writing tests ------------- Writing test cases is as simple as creating a new shell script and adding some test code. Success and failure are reported by setting the exit status. Setting the exit status to `0` indicates success, a non-zero value indicates failure (which reflects the usual exit code semantics of POSIX systems). To enable a test, just add it to the `TESTS` variable in `test/Makefile.am`. If your test case is written in a non-interpretable language, you may need to add some compilation directives as well. Please note that we only accept POSIX-compatible shell scripts and C in mainline, so please avoid using other languages if you plan to get your test case integrated upstream. If your test case invokes the calcurse binary, please continue reading the following sections, also. The `run-test` helper --------------------- The `run-test` helper is a simple C program that makes writing script-based test cases much easier. Tests for the calcurse command line interface usually invoke the calcurse binary with some special command line options and compare the output with a hardcoded set of expected results. Unfortunately, comparing the output of two commands is not exactly easy in POSIX shell: this is where the `run-test` helper comes in handy. If you run the `run-test` helper, you can pass one or more executable files as parameters. The helper then invokes each of the specified scripts twice: Once passing `actual` as a command line parameter and once passing `expected`. It then compares the outputs of both invocations and checks if they are equal or not. If the `actual`/`expected` outputs differ for one of the programs passed to `run-test`, if displays `FAIL` and exits with a non-zero exit status. It returns success otherwise. Here is a simple example on how to use `run-test`: #!/bin/sh if [ "$1" = 'actual' ]; then echo 'obrocodobro' | sed 's/o/a/g' elif [ "$1" = 'expected' ]; then echo 'abracadabra' else ./run-test "$0" fi If the script is run without any parameters, it simply invokes `run-test`, passing itself as a command line parameter (see the `else` branch). `run-test` then reruns the script, passing `actual` as the first parameter. This starts the actual test (see the `if` branch). It reruns the script a second time, passing `expected` as the first parameter which results in the script printing the expected result for this test (see the `elif` branch). Finally, `run-test` compares both outputs, prints a message indicating whether they are equal and sets the exit status accordingly. This exit status is then passed on to the original instance of the test script and returned since `./run-test "$0"` is the last command that is run if the script is invoked without any parameters. You should stick to this strategy whenever you want to check the output of a non-interactive calcurse instance in a test. Check the following tests for some more examples: * `todo-001.sh` * `todo-002.sh` * `todo-003.sh` Using libfaketime ----------------- Some tests might require faking current date and time. We currently use libfaketime to achieve this. Check the following files for examples: * `appointment-001.sh` * `next-001.sh` * `range-001.sh` * `range-002.sh` * `range-003.sh` NOTE: Please do not forget to check for libfaketime presence at the beginning of your test. Otherwise, your test is likely to fail on systems that are not supported by libfaketime. Additional notes ---------------- Most tests, that invoke the calcurse binary, pass the `--read-only` parameter to make sure the data directory is not modified by calcurse, preventing unexpected side effects. Please follow this guideline if you plan to submit your patch upstream. calcurse-4.0.0/test/appointment-018.sh0000755000175000017500000000034212365427602014425 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-appointment-018" \ -d02/23/2013 2>errors && exit 1 grep -Fq 'syntax error in item time or duration' errors rm -f errors calcurse-4.0.0/test/recur-001.sh0000755000175000017500000000223012365427602013175 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-recur" \ -s01/01/2000 -r8 --format-recur-apt='' elif [ "$1" = 'expected' ]; then cat < ..:.. Appointment EOD else ./run-test "$0" fi calcurse-4.0.0/test/recur-002.sh0000755000175000017500000000053112365427602013200 00000000000000#!/bin/sh . "${TEST_INIT:-./test-init.sh}" if [ "$1" = 'actual' ]; then "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-recur" \ -d02/01/2000 --format-recur-apt='' elif [ "$1" = 'expected' ]; then cat < header file. */ #undef HAVE_CTYPE_H /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define if you have the iconv() function. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the 'math' library (-lm). */ #undef HAVE_LIBMATH /* Define to 1 if you have the 'pthread' library (-pthread). */ #undef HAVE_LIBPTHREAD /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_NCURSESW_NCURSES_H /* Define to 1 if you have the header file. */ #undef HAVE_NCURSES_H /* Define to 1 if you have the header file. */ #undef HAVE_NCURSES_NCURSES_H /* Define to 1 if you have the header file. */ #undef HAVE_PATHS_H /* Define to 1 if you have the header file. */ #undef HAVE_PTHREAD_H /* Define to 1 if you have the header file. */ #undef HAVE_REGEX_H /* Define to 1 if you have the header file. */ #undef HAVE_SIGNAL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION calcurse-4.0.0/mkinstalldirs0000755000175000017500000000370412472330401013043 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" 1>&2 exit 0 ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # End: # mkinstalldirs ends here calcurse-4.0.0/depcomp0000755000175000017500000005601612472330410011616 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: calcurse-4.0.0/test-driver0000755000175000017500000001104012472330410012423 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2013-07-13.22; # UTC # Copyright (C) 2011-2014 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: calcurse-4.0.0/aclocal.m40000644000175000017500000012256612472330404012110 00000000000000# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/gettext.m4]) m4_include([m4/iconv.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/nls.m4]) m4_include([m4/po.m4]) m4_include([m4/progtest.m4]) calcurse-4.0.0/config.guess0000755000175000017500000012367212472330407012572 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-11-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: calcurse-4.0.0/ABOUT-NLS0000644000175000017500000015111612472330376011500 00000000000000Notes on the Free Translation Project ************************************* Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work at translations should contact the appropriate team. When reporting bugs in the `intl/' directory or bugs which may be related to internationalization, you should tell about the version of `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. Quick configuration advice ========================== If you want to exploit the full power of internationalization, you should configure it using ./configure --with-included-gettext to force usage of internationalizing routines provided within this package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as many features (such as locale alias, message inheritance, automatic charset conversion or plural form handling) as the implementation here. It is also not possible to offer this additional functionality on top of a `catgets' implementation. Future versions of GNU `gettext' will very likely convey even more functionality. So it might be a good idea to change to GNU `gettext' as soon as possible. So you need _not_ provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. INSTALL Matters =============== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. If not, the GNU `gettext' own library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of the GNU `gettext' package is _not_ required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext ./configure --disable-nls will respectively bypass any pre-existing `gettext' to use the internationalizing routines provided within this package, or else, _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl.a' file and will decide to use this. This might be not what is desirable. You should use the more recent version of the GNU `gettext' library. I.e. if the file `intl/VERSION' shows that the library which comes with this package is more recent, you should use ./configure --with-included-gettext to prevent auto-detection. The configuration process will not test for the `catgets' function and therefore it will not be used. The reason is that even an emulation of `gettext' on top of `catgets' could not provide all the extensions of the GNU `gettext' library. Internationalized packages have usually many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. Using This Package ================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your country by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. Translating Teams ================= For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `translation@iro.umontreal.ca' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skill are praised more than programming skill, here. Available Packages ================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of January 2004. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am ar az be bg bs ca cs da de el en en_GB eo es +----------------------------------------------------+ a2ps | [] [] [] [] | aegis | () | ant-phone | () | anubis | | ap-utils | | aspell | [] | bash | [] [] [] [] | batchelor | | bfd | [] [] | binutils | [] [] | bison | [] [] [] | bluez-pin | [] [] [] | clisp | | clisp | [] [] [] | console-tools | [] [] | coreutils | [] [] [] [] | cpio | [] [] [] | darkstat | [] () [] | diffutils | [] [] [] [] [] [] [] | e2fsprogs | [] [] [] | enscript | [] [] [] [] | error | [] [] [] [] [] | fetchmail | [] () [] [] [] [] | fileutils | [] [] [] | findutils | [] [] [] [] [] [] [] | flex | [] [] [] [] | fslint | | gas | [] | gawk | [] [] [] [] | gbiff | [] | gcal | [] | gcc | [] [] | gettext | [] [] [] [] [] | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] [] [] | gettext-tools | [] [] [] | gimp-print | [] [] [] [] [] | gliv | | glunarclock | [] [] | gnubiff | [] | gnucash | [] () [] [] | gnucash-glossary | [] () [] | gnupg | [] () [] [] [] [] | gpe-aerial | [] | gpe-beam | [] [] | gpe-calendar | [] [] | gpe-clock | [] [] | gpe-conf | [] [] | gpe-contacts | [] [] | gpe-edit | [] | gpe-go | [] | gpe-login | [] [] | gpe-ownerinfo | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] | gpe-taskmanager | [] [] | gpe-timesheet | [] | gpe-today | [] [] | gpe-todo | [] [] | gphoto2 | [] [] [] [] | gprof | [] [] [] | gpsdrive | () () () | gramadoir | [] | grep | [] [] [] [] [] [] | gretl | [] | gtick | [] () | hello | [] [] [] [] [] [] | id-utils | [] [] | indent | [] [] [] [] | iso_3166 | [] [] [] [] [] [] [] [] [] [] | iso_3166_1 | [] [] [] [] [] [] | iso_3166_2 | | iso_3166_3 | [] | iso_4217 | [] [] [] [] | iso_639 | | jpilot | [] [] [] | jtag | | jwhois | [] | kbd | [] [] [] [] [] | latrine | () | ld | [] [] | libc | [] [] [] [] [] [] | libgpewidget | [] [] | libiconv | [] [] [] [] [] | lifelines | [] () | lilypond | [] | lingoteach | | lingoteach_lessons | () () | lynx | [] [] [] [] | m4 | [] [] [] [] | mailutils | [] [] | make | [] [] [] | man-db | [] () [] [] () | minicom | [] [] [] | mysecretdiary | [] [] [] | nano | [] () [] [] [] | nano_1_0 | [] () [] [] [] | opcodes | [] | parted | [] [] [] [] [] | ptx | [] [] [] [] [] | python | | radius | [] | recode | [] [] [] [] [] [] [] | rpm | [] [] | screem | | scrollkeeper | [] [] [] [] [] [] | sed | [] [] [] [] [] [] | sh-utils | [] [] [] | shared-mime-info | | sharutils | [] [] [] [] [] [] | silky | () | skencil | [] () [] | sketch | [] () [] | soundtracker | [] [] [] | sp | [] | tar | [] [] [] [] | texinfo | [] [] [] | textutils | [] [] [] [] | tin | () () | tp-robot | | tuxpaint | [] [] [] [] [] [] [] | unicode-han-tra... | | unicode-transla... | | util-linux | [] [] [] [] [] | vorbis-tools | [] [] [] [] | wastesedge | () | wdiff | [] [] [] [] | wget | [] [] [] [] [] [] | xchat | [] [] [] [] | xfree86_xkb_xml | [] [] | xpad | [] | +----------------------------------------------------+ af am ar az be bg bs ca cs da de el en en_GB eo es 4 0 0 1 9 4 1 40 41 60 78 17 1 5 13 68 et eu fa fi fr ga gl he hr hu id is it ja ko lg +-------------------------------------------------+ a2ps | [] [] [] () () | aegis | | ant-phone | [] | anubis | [] | ap-utils | [] | aspell | [] [] | bash | [] [] | batchelor | [] [] | bfd | [] | binutils | [] [] | bison | [] [] [] [] | bluez-pin | [] [] [] [] [] | clisp | | clisp | [] | console-tools | | coreutils | [] [] [] [] [] [] | cpio | [] [] [] [] | darkstat | () [] [] [] | diffutils | [] [] [] [] [] [] [] | e2fsprogs | | enscript | [] [] | error | [] [] [] [] | fetchmail | [] | fileutils | [] [] [] [] [] [] | findutils | [] [] [] [] [] [] [] [] [] [] [] | flex | [] [] [] | fslint | [] | gas | [] | gawk | [] [] [] | gbiff | [] | gcal | [] | gcc | [] | gettext | [] [] [] | gettext-examples | [] [] | gettext-runtime | [] [] [] [] [] | gettext-tools | [] [] [] | gimp-print | [] [] | gliv | () | glunarclock | [] [] [] [] | gnubiff | [] | gnucash | () [] | gnucash-glossary | [] | gnupg | [] [] [] [] [] [] [] | gpe-aerial | [] | gpe-beam | [] | gpe-calendar | [] [] [] | gpe-clock | [] | gpe-conf | [] | gpe-contacts | [] [] | gpe-edit | [] [] | gpe-go | [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] | gpe-sketchbook | [] | gpe-su | [] | gpe-taskmanager | [] | gpe-timesheet | [] [] [] | gpe-today | [] [] | gpe-todo | [] [] | gphoto2 | [] [] [] | gprof | [] [] | gpsdrive | () () () | gramadoir | [] [] | grep | [] [] [] [] [] [] [] [] [] [] [] | gretl | [] [] | gtick | [] [] [] | hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | id-utils | [] [] [] [] | indent | [] [] [] [] [] [] [] [] [] | iso_3166 | [] [] [] [] [] [] [] | iso_3166_1 | [] [] [] [] [] | iso_3166_2 | | iso_3166_3 | | iso_4217 | [] [] [] [] [] [] | iso_639 | | jpilot | [] () | jtag | [] | jwhois | [] [] [] [] | kbd | [] | latrine | [] | ld | [] | libc | [] [] [] [] [] [] | libgpewidget | [] [] [] [] | libiconv | [] [] [] [] [] [] [] [] [] | lifelines | () | lilypond | [] | lingoteach | [] [] | lingoteach_lessons | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailutils | | make | [] [] [] [] [] [] | man-db | () () | minicom | [] [] [] [] | mysecretdiary | [] [] | nano | [] [] [] [] | nano_1_0 | [] [] [] [] | opcodes | [] | parted | [] [] [] | ptx | [] [] [] [] [] [] [] | python | | radius | [] | recode | [] [] [] [] [] [] | rpm | [] [] | screem | | scrollkeeper | [] | sed | [] [] [] [] [] [] [] [] [] | sh-utils | [] [] [] [] [] [] [] | shared-mime-info | [] [] [] | sharutils | [] [] [] [] [] | silky | () [] () () | skencil | [] | sketch | [] | soundtracker | [] [] | sp | [] () | tar | [] [] [] [] [] [] [] [] [] | texinfo | [] [] [] [] | textutils | [] [] [] [] [] [] | tin | [] () | tp-robot | [] | tuxpaint | [] [] [] [] [] [] [] [] [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux | [] [] [] [] () [] | vorbis-tools | [] | wastesedge | () | wdiff | [] [] [] [] [] [] | wget | [] [] [] [] [] [] [] | xchat | [] [] [] | xfree86_xkb_xml | [] [] | xpad | [] [] | +-------------------------------------------------+ et eu fa fi fr ga gl he hr hu id is it ja ko lg 22 2 1 26 106 28 24 8 10 41 33 1 26 33 12 0 lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru +-----------------------------------------------------+ a2ps | [] [] () () [] [] [] | aegis | () () () | ant-phone | [] [] | anubis | [] [] [] [] [] [] | ap-utils | [] () [] | aspell | [] | bash | [] [] [] | batchelor | [] | bfd | [] | binutils | [] | bison | [] [] [] [] [] | bluez-pin | [] [] [] | clisp | | clisp | [] | console-tools | [] | coreutils | [] [] | cpio | [] [] [] [] [] | darkstat | [] [] [] [] | diffutils | [] [] [] [] [] [] | e2fsprogs | [] | enscript | [] [] [] [] | error | [] [] [] | fetchmail | [] [] () [] | fileutils | [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] | fslint | [] [] | gas | | gawk | [] [] [] | gbiff | [] [] | gcal | | gcc | | gettext | [] [] [] | gettext-examples | [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] | gimp-print | [] | gliv | [] [] [] | glunarclock | [] [] [] [] | gnubiff | [] | gnucash | [] [] () [] | gnucash-glossary | [] [] | gnupg | [] | gpe-aerial | [] [] [] [] | gpe-beam | [] [] [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] | gpe-conf | [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] [] | gpe-go | [] [] [] | gpe-login | [] [] [] [] | gpe-ownerinfo | [] [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] [] [] | gphoto2 | [] | gprof | [] [] | gpsdrive | () () [] | gramadoir | () [] | grep | [] [] [] [] [] | gretl | | gtick | [] [] [] | hello | [] [] [] [] [] [] [] [] [] [] | id-utils | [] [] [] [] | indent | [] [] [] [] | iso_3166 | [] [] [] | iso_3166_1 | [] [] | iso_3166_2 | | iso_3166_3 | [] | iso_4217 | [] [] [] [] [] [] [] [] | iso_639 | [] | jpilot | () () | jtag | | jwhois | [] [] [] [] () | kbd | [] [] [] | latrine | [] | ld | | libc | [] [] [] [] | libgpewidget | [] [] [] | libiconv | [] [] [] [] [] | lifelines | | lilypond | | lingoteach | | lingoteach_lessons | | lynx | [] [] [] | m4 | [] [] [] [] [] | mailutils | [] [] [] | make | [] [] [] [] | man-db | [] | minicom | [] [] [] [] | mysecretdiary | [] [] [] | nano | [] [] [] [] [] | nano_1_0 | [] [] [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | ptx | [] [] [] [] [] [] [] [] | python | | radius | [] [] | recode | [] [] [] [] | rpm | [] [] [] | screem | | scrollkeeper | [] [] [] [] [] | sed | [] [] [] | sh-utils | [] [] | shared-mime-info | [] [] | sharutils | [] [] | silky | () | skencil | [] [] | sketch | [] [] | soundtracker | | sp | | tar | [] [] [] [] [] [] | texinfo | [] [] [] [] | textutils | [] [] | tin | | tp-robot | [] | tuxpaint | [] [] [] [] [] [] [] [] | unicode-han-tra... | | unicode-transla... | | util-linux | [] [] [] | vorbis-tools | [] [] [] | wastesedge | | wdiff | [] [] [] [] [] | wget | [] [] [] | xchat | [] [] [] | xfree86_xkb_xml | [] [] | xpad | [] [] | +-----------------------------------------------------+ lt lv mk mn ms mt nb nl nn no nso pl pt pt_BR ro ru 1 2 0 3 12 0 10 69 6 7 1 40 26 36 76 63 sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu +-----------------------------------------------------+ a2ps | [] [] [] [] | 16 aegis | | 0 ant-phone | | 3 anubis | [] [] | 9 ap-utils | () | 3 aspell | | 4 bash | | 9 batchelor | | 3 bfd | [] [] | 6 binutils | [] [] [] | 8 bison | [] [] | 14 bluez-pin | [] [] [] | 14 clisp | | 0 clisp | | 5 console-tools | | 3 coreutils | [] [] [] [] | 16 cpio | [] [] | 14 darkstat | [] [] [] () () | 12 diffutils | [] [] [] | 23 e2fsprogs | [] [] | 6 enscript | [] [] | 12 error | [] [] [] | 15 fetchmail | [] [] | 11 fileutils | [] [] [] [] [] | 17 findutils | [] [] [] [] [] [] | 29 flex | [] [] | 13 fslint | | 3 gas | [] | 3 gawk | [] [] | 12 gbiff | | 4 gcal | [] [] | 4 gcc | [] | 4 gettext | [] [] [] [] [] | 16 gettext-examples | [] [] [] [] [] | 14 gettext-runtime | [] [] [] [] [] [] [] [] | 22 gettext-tools | [] [] [] [] [] [] | 14 gimp-print | [] [] | 10 gliv | | 3 glunarclock | [] [] [] | 13 gnubiff | | 3 gnucash | [] [] | 9 gnucash-glossary | [] [] [] | 8 gnupg | [] [] [] [] | 17 gpe-aerial | [] | 7 gpe-beam | [] | 8 gpe-calendar | [] [] [] [] | 13 gpe-clock | [] [] [] | 10 gpe-conf | [] [] | 9 gpe-contacts | [] [] [] | 11 gpe-edit | [] [] [] [] [] | 12 gpe-go | | 5 gpe-login | [] [] [] [] [] | 13 gpe-ownerinfo | [] [] [] [] | 13 gpe-sketchbook | [] [] | 9 gpe-su | [] [] [] | 10 gpe-taskmanager | [] [] [] | 10 gpe-timesheet | [] [] [] [] | 12 gpe-today | [] [] [] [] [] | 13 gpe-todo | [] [] [] [] | 12 gphoto2 | [] [] [] | 11 gprof | [] [] | 9 gpsdrive | [] [] | 3 gramadoir | [] | 5 grep | [] [] [] [] | 26 gretl | | 3 gtick | | 7 hello | [] [] [] [] [] | 34 id-utils | [] [] | 12 indent | [] [] [] [] | 21 iso_3166 | [] [] [] [] [] [] [] | 27 iso_3166_1 | [] [] [] | 16 iso_3166_2 | | 0 iso_3166_3 | | 2 iso_4217 | [] [] [] [] [] [] | 24 iso_639 | | 1 jpilot | [] [] [] [] [] | 9 jtag | [] | 2 jwhois | () [] [] | 11 kbd | [] [] | 11 latrine | | 2 ld | [] [] | 5 libc | [] [] [] [] | 20 libgpewidget | [] [] [] [] | 13 libiconv | [] [] [] [] [] [] [] [] | 27 lifelines | [] | 2 lilypond | [] | 3 lingoteach | | 2 lingoteach_lessons | () | 0 lynx | [] [] [] | 14 m4 | [] [] | 15 mailutils | | 5 make | [] [] [] | 16 man-db | [] | 5 minicom | | 11 mysecretdiary | [] [] | 10 nano | [] [] [] [] | 17 nano_1_0 | [] [] [] | 17 opcodes | [] [] | 6 parted | [] [] [] | 15 ptx | [] [] | 22 python | | 0 radius | | 4 recode | [] [] [] | 20 rpm | [] [] | 9 screem | [] [] | 2 scrollkeeper | [] [] [] | 15 sed | [] [] [] [] [] [] | 24 sh-utils | [] [] | 14 shared-mime-info | [] [] | 7 sharutils | [] [] [] [] | 17 silky | () | 3 skencil | [] | 6 sketch | [] | 6 soundtracker | [] [] | 7 sp | [] | 3 tar | [] [] [] [] [] | 24 texinfo | [] [] [] | 14 textutils | [] [] [] [] | 16 tin | | 1 tp-robot | | 2 tuxpaint | [] [] [] [] [] | 29 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux | [] [] | 15 vorbis-tools | | 8 wastesedge | | 0 wdiff | [] [] [] | 18 wget | [] [] [] [] [] [] [] [] | 24 xchat | [] [] [] [] [] | 15 xfree86_xkb_xml | [] [] [] [] [] | 11 xpad | | 5 +-----------------------------------------------------+ 63 teams sk sl sr sv ta th tr uk ven vi wa xh zh_CN zh_TW zu 131 domains 47 19 28 83 0 0 59 13 1 1 11 0 22 22 0 1373 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If January 2004 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. Using `gettext' in new packages =============================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `translation@iro.umontreal.ca' to make the `.pot' files available to the translation teams. calcurse-4.0.0/README0000644000175000017500000000303312273003161011107 00000000000000calcurse ======== Read `INSTALL` for instructions on how to build and install calcurse. Check `TODO` for things that still need to be done. Browse the file `doc/manual.html` (or its source `doc/manual.txt`) for detailed descriptions on how to use calcurse. Package Overview ---------------- You should be reading this file in a directory called: `calcurse-x.y.z`, where `x.y.z` is the current version number. There should be four subdirectories: * `src`: contains calcurse sources * `test`: contains a test suite and test cases for calcurse * `scripts`: contains additional scripts, such as `calcurse-upgrade` * `doc`: contains detailed documentation in plain text and HTML Authors ------- * Frederic Culot (Founder) * Lukas Fleischer (Developer) Contributors ------------ * RegEx support: Erik Saule * Dutch translation: Jeremy Roon, 2007-2010 * French translation: Frédéric Culot, 2006-2010 * French translation: Toucouch, 2007 * French translation: Erik Saule, 2011-2012 * French translation: Stéphane Aulery, 2012 * French translation: Baptiste Jonglez, 2012 * German translation: Michael Schulz, 2006-2010 * German translation: Chris M., 2006 * German translation: Benjamin Moeller, 2010 * German translation: Lukas Fleischer, 2011-2012 * Portuguese (Brazil) translation: Rafael Ferreira, 2012 * Russian translation: Aleksey Mechonoshin, 2011-2012 * Spanish translation: Jose Lopez, 2006-2010 Also check the `Thanks` section in the manual for a list of people who have contributed by reporting bugs, sending fixes, or suggesting improvements. calcurse-4.0.0/src/0000755000175000017500000000000012472330423011104 500000000000000calcurse-4.0.0/src/ical.c0000644000175000017500000007445112472326722012122 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include "calcurse.h" #define ICALDATEFMT "%Y%m%d" #define ICALDATETIMEFMT "%Y%m%dT%H%M%S" typedef enum { ICAL_VEVENT, ICAL_VTODO, ICAL_TYPES } ical_types_e; typedef enum { UNDEFINED, APPOINTMENT, EVENT } ical_vevent_e; typedef struct { enum recur_type type; int freq; long until; unsigned count; } ical_rpt_t; static void ical_export_header(FILE *); static void ical_export_recur_events(FILE *); static void ical_export_events(FILE *); static void ical_export_recur_apoints(FILE *); static void ical_export_apoints(FILE *); static void ical_export_todo(FILE *); static void ical_export_footer(FILE *); static const char *ical_recur_type[RECUR_TYPES] = { "", "DAILY", "WEEKLY", "MONTHLY", "YEARLY" }; /* iCal alarm notification. */ static void ical_export_valarm(FILE * stream) { fputs("BEGIN:VALARM\n", stream); pthread_mutex_lock(&nbar.mutex); fprintf(stream, "TRIGGER:-P%dS\n", nbar.cntdwn); pthread_mutex_unlock(&nbar.mutex); fputs("ACTION:DISPLAY\n", stream); fputs("END:VALARM\n", stream); } /* Export header. */ static void ical_export_header(FILE * stream) { fputs("BEGIN:VCALENDAR\n", stream); fprintf(stream, "PRODID:-//calcurse//NONSGML v%s//EN\n", VERSION); fputs("VERSION:2.0\n", stream); } /* Export footer. */ static void ical_export_footer(FILE * stream) { fputs("END:VCALENDAR\n", stream); } /* Export recurrent events. */ static void ical_export_recur_events(FILE * stream) { llist_item_t *i, *j; char ical_date[BUFSIZ]; LLIST_FOREACH(&recur_elist, i) { struct recur_event *rev = LLIST_GET_DATA(i); date_sec2date_fmt(rev->day, ICALDATEFMT, ical_date); fputs("BEGIN:VEVENT\n", stream); fprintf(stream, "DTSTART:%s\n", ical_date); fprintf(stream, "RRULE:FREQ=%s;INTERVAL=%d", ical_recur_type[rev->rpt->type], rev->rpt->freq); if (rev->rpt->until != 0) { date_sec2date_fmt(rev->rpt->until, ICALDATEFMT, ical_date); fprintf(stream, ";UNTIL=%s\n", ical_date); } else { fputc('\n', stream); } if (LLIST_FIRST(&rev->exc)) { fputs("EXDATE:", stream); LLIST_FOREACH(&rev->exc, j) { struct excp *exc = LLIST_GET_DATA(j); date_sec2date_fmt(exc->st, ICALDATEFMT, ical_date); fprintf(stream, "%s", ical_date); if (LLIST_NEXT(j)) fputc(',', stream); else fputc('\n', stream); } } fprintf(stream, "SUMMARY:%s\n", rev->mesg); fputs("END:VEVENT\n", stream); } } /* Export events. */ static void ical_export_events(FILE * stream) { llist_item_t *i; char ical_date[BUFSIZ]; LLIST_FOREACH(&eventlist, i) { struct event *ev = LLIST_TS_GET_DATA(i); date_sec2date_fmt(ev->day, ICALDATEFMT, ical_date); fputs("BEGIN:VEVENT\n", stream); fprintf(stream, "DTSTART:%s\n", ical_date); fprintf(stream, "SUMMARY:%s\n", ev->mesg); fputs("END:VEVENT\n", stream); } } /* Export recurrent appointments. */ static void ical_export_recur_apoints(FILE * stream) { llist_item_t *i, *j; char ical_datetime[BUFSIZ]; char ical_date[BUFSIZ]; LLIST_TS_LOCK(&recur_alist_p); LLIST_TS_FOREACH(&recur_alist_p, i) { struct recur_apoint *rapt = LLIST_TS_GET_DATA(i); date_sec2date_fmt(rapt->start, ICALDATETIMEFMT, ical_datetime); fputs("BEGIN:VEVENT\n", stream); fprintf(stream, "DTSTART:%s\n", ical_datetime); fprintf(stream, "DURATION:PT0H0M%ldS\n", rapt->dur); fprintf(stream, "RRULE:FREQ=%s;INTERVAL=%d", ical_recur_type[rapt->rpt->type], rapt->rpt->freq); if (rapt->rpt->until != 0) { date_sec2date_fmt(rapt->rpt->until + HOURINSEC, ICALDATEFMT, ical_date); fprintf(stream, ";UNTIL=%s\n", ical_date); } else { fputc('\n', stream); } if (LLIST_FIRST(&rapt->exc)) { fputs("EXDATE:", stream); LLIST_FOREACH(&rapt->exc, j) { struct excp *exc = LLIST_GET_DATA(j); date_sec2date_fmt(exc->st, ICALDATEFMT, ical_date); fprintf(stream, "%s", ical_date); if (LLIST_NEXT(j)) fputc(',', stream); else fputc('\n', stream); } } fprintf(stream, "SUMMARY:%s\n", rapt->mesg); if (rapt->state & APOINT_NOTIFY) ical_export_valarm(stream); fputs("END:VEVENT\n", stream); } LLIST_TS_UNLOCK(&recur_alist_p); } /* Export appointments. */ static void ical_export_apoints(FILE * stream) { llist_item_t *i; char ical_datetime[BUFSIZ]; LLIST_TS_LOCK(&alist_p); LLIST_TS_FOREACH(&alist_p, i) { struct apoint *apt = LLIST_TS_GET_DATA(i); date_sec2date_fmt(apt->start, ICALDATETIMEFMT, ical_datetime); fputs("BEGIN:VEVENT\n", stream); fprintf(stream, "DTSTART:%s\n", ical_datetime); fprintf(stream, "DURATION:P%ldDT%ldH%ldM%ldS\n", apt->dur / DAYINSEC, (apt->dur / HOURINSEC) % DAYINHOURS, (apt->dur / MININSEC) % HOURINMIN, apt->dur % MININSEC); fprintf(stream, "SUMMARY:%s\n", apt->mesg); if (apt->state & APOINT_NOTIFY) ical_export_valarm(stream); fputs("END:VEVENT\n", stream); } LLIST_TS_UNLOCK(&alist_p); } /* Export todo items. */ static void ical_export_todo(FILE * stream) { llist_item_t *i; LLIST_FOREACH(&todolist, i) { struct todo *todo = LLIST_TS_GET_DATA(i); if (todo->id < 0) /* completed items */ continue; fputs("BEGIN:VTODO\n", stream); fprintf(stream, "PRIORITY:%d\n", todo->id); fprintf(stream, "SUMMARY:%s\n", todo->mesg); fputs("END:VTODO\n", stream); } } /* Print a header to describe import log report format. */ static void ical_log_init(FILE * log, int major, int minor) { const char *header = "+-------------------------------------------------------------------+\n" "| Calcurse icalendar import log. |\n" "| |\n" "| Items imported from icalendar file, version %d.%d |\n" "| Some items could not be imported, they are described hereafter. |\n" "| The log line format is as follows: |\n" "| |\n" "| TYPE [LINE]: DESCRIPTION |\n" "| |\n" "| where: |\n" "| * TYPE represents the item type ('VEVENT' or 'VTODO') |\n" "| * LINE is the line in the input stream at which this item begins |\n" "| * DESCRIPTION indicates why the item could not be imported |\n" "+-------------------------------------------------------------------+\n\n"; if (log) fprintf(log, header, major, minor); } /* * Used to build a report of the import process. * The icalendar item for which a problem occurs is mentioned (by giving its * first line inside the icalendar file), together with a message describing the * problem. */ static void ical_log(FILE * log, ical_types_e type, unsigned lineno, char *msg) { const char *typestr[ICAL_TYPES] = { "VEVENT", "VTODO" }; RETURN_IF(type < 0 || type >= ICAL_TYPES, _("unknown ical type")); if (log) fprintf(log, "%s [%d]: %s\n", typestr[type], lineno, msg); } static void ical_store_todo(int priority, char *mesg, char *note) { todo_add(mesg, priority, note); mem_free(mesg); erase_note(¬e); } static void ical_store_event(char *mesg, char *note, long day, long end, ical_rpt_t * rpt, llist_t * exc) { const int EVENTID = 1; if (rpt) { recur_event_new(mesg, note, day, EVENTID, rpt->type, rpt->freq, rpt->until, exc); mem_free(rpt); goto cleanup; } if (end == 0 || end - day <= DAYINSEC) { event_new(mesg, note, day, EVENTID); goto cleanup; } /* * Here we have an event that spans over several days. * * In iCal, the end specifies when the event is supposed to end, in * calcurse, the end specifies the time that the last occurrence of the * event starts, so we need to do some conversion here. */ end = day + ((end - day - 1) / DAYINSEC) * DAYINSEC; rpt = mem_malloc(sizeof(ical_rpt_t)); rpt->type = RECUR_DAILY; rpt->freq = 1; rpt->count = 0; rpt->until = end; recur_event_new(mesg, note, day, EVENTID, rpt->type, rpt->freq, rpt->until, exc); mem_free(rpt); cleanup: mem_free(mesg); erase_note(¬e); } static void ical_store_apoint(char *mesg, char *note, long start, long dur, ical_rpt_t * rpt, llist_t * exc, int has_alarm) { char state = 0L; if (has_alarm) state |= APOINT_NOTIFY; if (rpt) { recur_apoint_new(mesg, note, start, dur, state, rpt->type, rpt->freq, rpt->until, exc); mem_free(rpt); } else { apoint_new(mesg, note, start, dur, state); } mem_free(mesg); erase_note(¬e); } /* * Returns an allocated string representing the string given in argument once * unformatted. * * Note: * Even if the RFC2445 recommends not to have more than 75 octets on one line of * text, I prefer not to restrict the parsing to this size, thus I use a buffer * of size BUFSIZ. * * Extract from RFC2445: * Lines of text SHOULD NOT be longer than 75 octets, excluding the line * break. */ static char *ical_unformat_line(char *line) { char *p, uline[BUFSIZ]; int len; if (strlen(line) >= BUFSIZ) return NULL; memset(uline, 0, BUFSIZ); for (len = 0, p = line; *p; p++) { switch (*p) { case '\\': switch (*(p + 1)) { case 'n': uline[len++] = '\n'; p++; break; case 't': uline[len++] = '\t'; p++; break; case ';': case ':': case ',': uline[len++] = *(p + 1); p++; break; default: uline[len++] = *p; break; } break; default: uline[len++] = *p; break; } } return mem_strdup(uline); } static void ical_readline_init(FILE * fdi, char *buf, char *lstore, unsigned *ln) { char *eol; *buf = *lstore = '\0'; if (fgets(lstore, BUFSIZ, fdi)) { if ((eol = strchr(lstore, '\n')) != NULL) { if (*(eol - 1) == '\r') *(eol - 1) = '\0'; else *eol = '\0'; } (*ln)++; } } static int ical_readline(FILE * fdi, char *buf, char *lstore, unsigned *ln) { char *eol; strncpy(buf, lstore, BUFSIZ); (*ln)++; while (fgets(lstore, BUFSIZ, fdi) != NULL) { if ((eol = strchr(lstore, '\n')) != NULL) { if (*(eol - 1) == '\r') *(eol - 1) = '\0'; else *eol = '\0'; } if (*lstore != SPACE && *lstore != TAB) break; strncat(buf, lstore + 1, BUFSIZ - strlen(buf) - 1); (*ln)++; } if (feof(fdi)) { *lstore = '\0'; if (*buf == '\0') return 0; } return 1; } static int ical_chk_header(FILE * fd, char *buf, char *lstore, unsigned *lineno, int *major, int *minor) { const char icalheader[] = "BEGIN:VCALENDAR"; if (!ical_readline(fd, buf, lstore, lineno)) return 0; if (strncasecmp(buf, icalheader, sizeof(icalheader) - 1) != 0) return 0; while (!sscanf(buf, "VERSION:%d.%d", major, minor)) { if (!ical_readline(fd, buf, lstore, lineno)) return 0; } return 1; } /* * iCalendar date-time format is based on the ISO 8601 complete * representation. It should be something like : DATE 'T' TIME * where DATE is 'YYYYMMDD' and TIME is 'HHMMSS'. * The time and 'T' separator are optional (in the case of an day-long event). * * Optionnaly, if the type pointer is given, specify if it is an event * (no time is given, meaning it is an all-day event), or an appointment * (time is given). * * The timezone is not yet handled by calcurse. */ static long ical_datetime2long(char *datestr, ical_vevent_e * type) { const int NOTFOUND = 0, FORMAT_DATE = 3, FORMAT_DATETIME = 5; struct date date; unsigned hour, min; long datelong; int format; format = sscanf(datestr, "%04u%02u%02uT%02u%02u", &date.yyyy, &date.mm, &date.dd, &hour, &min); if (format == FORMAT_DATE) { if (type) *type = EVENT; datelong = date2sec(date, 0, 0); } else if (format == FORMAT_DATETIME) { if (type) *type = APPOINTMENT; datelong = date2sec(date, hour, min); } else { datelong = NOTFOUND; } return datelong; } static long ical_durtime2long(char *timestr) { char *p; int bytes_read; unsigned hour = 0, min = 0, sec = 0; if ((p = strchr(timestr, 'T')) == NULL) return 0; p++; if (strchr(p, 'H')) { if (sscanf(p, "%uH%n", &hour, &bytes_read) != 1) return 0; p += bytes_read; } if (strchr(p, 'M')) { if (sscanf(p, "%uM%n", &min, &bytes_read) != 1) return 0; p += bytes_read; } if (strchr(p, 'S')) { if (sscanf(p, "%uM%n", &sec, &bytes_read) != 1) return 0; p += bytes_read; } if (hour == 0 && min == 0 && sec == 0) return 0; return hour * HOURINSEC + min * MININSEC + sec; } /* * Extract from RFC2445: * * Value Name: DURATION * * Purpose: This value type is used to identify properties that contain * duration of time. * * Formal Definition: The value type is defined by the following * notation: * * dur-value = (["+"] / "-") "P" (dur-date / dur-time / dur-week) * dur-date = dur-day [dur-time] * dur-time = "T" (dur-hour / dur-minute / dur-second) * dur-week = 1*DIGIT "W" * dur-hour = 1*DIGIT "H" [dur-minute] * dur-minute = 1*DIGIT "M" [dur-second] * dur-second = 1*DIGIT "S" * dur-day = 1*DIGIT "D" * * Example: A duration of 15 days, 5 hours and 20 seconds would be: * P15DT5H0M20S * A duration of 7 weeks would be: * P7W */ static long ical_dur2long(char *durstr) { const int NOTFOUND = -1; long durlong; char *p; struct { unsigned week, day; } date; memset(&date, 0, sizeof date); if ((p = strchr(durstr, 'P')) == NULL) { durlong = NOTFOUND; } else { p++; if (*p == '-') return NOTFOUND; else if (*p == '+') p++; if (*p == 'T') { /* dur-time */ durlong = ical_durtime2long(p); } else if (strchr(p, 'W')) { /* dur-week */ if (sscanf(p, "%u", &date.week) == 1) durlong = date.week * WEEKINDAYS * DAYINSEC; else durlong = NOTFOUND; } else { if (strchr(p, 'D')) { /* dur-date */ if (sscanf(p, "%uD", &date.day) == 1) { durlong = date.day * DAYINSEC; durlong += ical_durtime2long(p); } else { durlong = NOTFOUND; } } else { durlong = NOTFOUND; } } } return durlong; } /* * Compute the vevent repetition end date from the repetition count. * * Extract from RFC2445: * The COUNT rule part defines the number of occurrences at which to * range-bound the recurrence. The "DTSTART" property value, if specified, * counts as the first occurrence. */ static long ical_compute_rpt_until(long start, ical_rpt_t * rpt) { long until; switch (rpt->type) { case RECUR_DAILY: until = date_sec_change(start, 0, rpt->freq * (rpt->count - 1)); break; case RECUR_WEEKLY: until = date_sec_change(start, 0, rpt->freq * WEEKINDAYS * (rpt->count - 1)); break; case RECUR_MONTHLY: until = date_sec_change(start, rpt->freq * (rpt->count - 1), 0); break; case RECUR_YEARLY: until = date_sec_change(start, rpt->freq * 12 * (rpt->count - 1), 0); break; default: until = 0; break; /* NOTREACHED */ } return until; } /* * Read a recurrence rule from an iCalendar RRULE string. * * Value Name: RECUR * * Purpose: This value type is used to identify properties that contain * a recurrence rule specification. * * Formal Definition: The value type is defined by the following * notation: * * recur = "FREQ"=freq *( * * ; either UNTIL or COUNT may appear in a 'recur', * ; but UNTIL and COUNT MUST NOT occur in the same 'recur' * * ( ";" "UNTIL" "=" enddate ) / * ( ";" "COUNT" "=" 1*DIGIT ) / * * ; the rest of these keywords are optional, * ; but MUST NOT occur more than * ; once * * ( ";" "INTERVAL" "=" 1*DIGIT ) / * ( ";" "BYSECOND" "=" byseclist ) / * ( ";" "BYMINUTE" "=" byminlist ) / * ( ";" "BYHOUR" "=" byhrlist ) / * ( ";" "BYDAY" "=" bywdaylist ) / * ( ";" "BYMONTHDAY" "=" bymodaylist ) / * ( ";" "BYYEARDAY" "=" byyrdaylist ) / * ( ";" "BYWEEKNO" "=" bywknolist ) / * ( ";" "BYMONTH" "=" bymolist ) / * ( ";" "BYSETPOS" "=" bysplist ) / * ( ";" "WKST" "=" weekday ) / * ( ";" x-name "=" text ) * ) */ static ical_rpt_t *ical_read_rrule(FILE * log, char *rrulestr, unsigned *noskipped, const int itemline) { const char daily[] = "DAILY"; const char weekly[] = "WEEKLY"; const char monthly[] = "MONTHLY"; const char yearly[] = "YEARLY"; const char count[] = "COUNT="; const char interv[] = "INTERVAL="; unsigned interval; ical_rpt_t *rpt; char *p; rpt = NULL; if ((p = strchr(rrulestr, ':')) != NULL) { char freqstr[BUFSIZ]; p++; rpt = mem_malloc(sizeof(ical_rpt_t)); memset(rpt, 0, sizeof(ical_rpt_t)); if (sscanf(p, "FREQ=%s", freqstr) != 1) { ical_log(log, ICAL_VEVENT, itemline, _("recurrence frequence not found.")); (*noskipped)++; mem_free(rpt); return NULL; } else { if (strncmp(freqstr, daily, sizeof(daily) - 1) == 0) { rpt->type = RECUR_DAILY; } else if (strncmp (freqstr, weekly, sizeof(weekly) - 1) == 0) { rpt->type = RECUR_WEEKLY; } else if (strncmp (freqstr, monthly, sizeof(monthly) - 1) == 0) { rpt->type = RECUR_MONTHLY; } else if (strncmp (freqstr, yearly, sizeof(yearly) - 1) == 0) { rpt->type = RECUR_YEARLY; } else { ical_log(log, ICAL_VEVENT, itemline, _("recurrence frequence not recognized.")); (*noskipped)++; mem_free(rpt); return NULL; } } /* The UNTIL rule part defines a date-time value which bounds the recurrence rule in an inclusive manner. If not present, and the COUNT rule part is also not present, the RRULE is considered to repeat forever. The COUNT rule part defines the number of occurrences at which to range-bound the recurrence. The "DTSTART" property value, if specified, counts as the first occurrence. */ if ((p = strstr(rrulestr, "UNTIL")) != NULL) { char *untilstr; untilstr = strchr(p, '='); rpt->until = ical_datetime2long(++untilstr, NULL); } else { unsigned cnt; char *countstr; if ((countstr = strstr(rrulestr, count)) != NULL) { countstr += sizeof(count) - 1; if (sscanf(countstr, "%u", &cnt) != 1) { rpt->until = 0; /* endless repetition */ } else { rpt->count = cnt; } } else { rpt->until = 0; } } if ((p = strstr(rrulestr, interv)) != NULL) { p += sizeof(interv) - 1; if (sscanf(p, "%u", &interval) != 1) { rpt->freq = 1; /* default frequence if none specified */ } else { rpt->freq = interval; } } else { rpt->freq = 1; } } else { ical_log(log, ICAL_VEVENT, itemline, _("recurrence rule malformed.")); (*noskipped)++; } return rpt; } static void ical_add_exc(llist_t * exc_head, long date) { if (date != 0) { struct excp *exc = mem_malloc(sizeof(struct excp)); exc->st = date; LLIST_ADD(exc_head, exc); } } /* * This property defines the list of date/time exceptions for a * recurring calendar component. */ static void ical_read_exdate(llist_t * exc, FILE * log, char *exstr, unsigned *noskipped, const int itemline) { char *p, *q; long date; if ((p = strchr(exstr, ':')) != NULL) { p++; while ((q = strchr(p, ',')) != NULL) { char buf[BUFSIZ]; const int buflen = q - p; strncpy(buf, p, buflen); buf[buflen] = '\0'; date = ical_datetime2long(buf, NULL); ical_add_exc(exc, date); p = ++q; } date = ical_datetime2long(p, NULL); ical_add_exc(exc, date); } else { ical_log(log, ICAL_VEVENT, itemline, _("recurrence exception dates malformed.")); (*noskipped)++; } } /* Return an allocated string containing the name of the newly created note. */ static char *ical_read_note(char *line, unsigned *noskipped, ical_types_e item_type, const int itemline, FILE * log) { char *p, *notestr, *note; if ((p = strchr(line, ':')) != NULL) { p++; notestr = ical_unformat_line(p); if (notestr == NULL) { ical_log(log, item_type, itemline, _("could not get entire item description.")); (*noskipped)++; return NULL; } else if (strlen(notestr) == 0) { mem_free(notestr); return NULL; } else { note = generate_note(notestr); mem_free(notestr); return note; } } else { ical_log(log, item_type, itemline, _("description malformed.")); (*noskipped)++; return NULL; } } /* Returns an allocated string containing the ical item summary. */ static char *ical_read_summary(char *line) { char *p, *summary; p = strchr(line, ':'); if (!p) return NULL; summary = ical_unformat_line(p + 1); if (!summary) return NULL; /* Event summaries must not contain newlines. */ for (p = strchr(summary, '\n'); p; p = strchr(p, '\n')) *p = ' '; return summary; } static void ical_read_event(FILE * fdi, FILE * log, unsigned *noevents, unsigned *noapoints, unsigned *noskipped, char *buf, char *lstore, unsigned *lineno) { const int ITEMLINE = *lineno; const char endevent[] = "END:VEVENT"; const char summary[] = "SUMMARY"; const char dtstart[] = "DTSTART"; const char dtend[] = "DTEND"; const char duration[] = "DURATION"; const char rrule[] = "RRULE"; const char exdate[] = "EXDATE"; const char alarm[] = "BEGIN:VALARM"; const char endalarm[] = "END:VALARM"; const char desc[] = "DESCRIPTION"; ical_vevent_e vevent_type; char *p; struct { llist_t exc; ical_rpt_t *rpt; char *mesg, *note; long start, end, dur; int has_alarm; } vevent; int skip_alarm; vevent_type = UNDEFINED; memset(&vevent, 0, sizeof vevent); LLIST_INIT(&vevent.exc); skip_alarm = 0; while (ical_readline(fdi, buf, lstore, lineno)) { if (skip_alarm) { /* Need to skip VALARM properties because some keywords could interfere, such as DURATION, SUMMARY,.. */ if (strncasecmp (buf, endalarm, sizeof(endalarm) - 1) == 0) skip_alarm = 0; continue; } if (strncasecmp(buf, endevent, sizeof(endevent) - 1) == 0) { if (vevent.mesg) { if (vevent.rpt && vevent.rpt->count) vevent.rpt->until = ical_compute_rpt_until(vevent. start, vevent. rpt); switch (vevent_type) { case APPOINTMENT: if (vevent.start == 0) { ical_log(log, ICAL_VEVENT, ITEMLINE, _("appointment has no start time.")); goto cleanup; } if (vevent.dur == 0) { if (vevent.end == 0) { ical_log(log, ICAL_VEVENT, ITEMLINE, _("could not compute duration " "(no end time).")); goto cleanup; } else if (vevent.start == vevent.end) { vevent_type = EVENT; vevent.end = 0L; ical_store_event (vevent.mesg, vevent.note, vevent.start, vevent.end, vevent.rpt, &vevent.exc); (*noevents)++; return; } else { vevent.dur = vevent.end - vevent.start; if (vevent.dur < 0) { ical_log (log, ICAL_VEVENT, ITEMLINE, _("item has a negative duration.")); goto cleanup; } } } ical_store_apoint(vevent.mesg, vevent.note, vevent.start, vevent.dur, vevent.rpt, &vevent.exc, vevent. has_alarm); (*noapoints)++; break; case EVENT: if (vevent.start == 0) { ical_log(log, ICAL_VEVENT, ITEMLINE, _("event date is not defined.")); goto cleanup; } ical_store_event(vevent.mesg, vevent.note, vevent.start, vevent.end, vevent.rpt, &vevent.exc); (*noevents)++; break; case UNDEFINED: ical_log(log, ICAL_VEVENT, ITEMLINE, _("item could not be identified.")); goto cleanup; break; } } else { ical_log(log, ICAL_VEVENT, ITEMLINE, _("could not retrieve item summary.")); goto cleanup; } return; } else { if (strncasecmp(buf, dtstart, sizeof(dtstart) - 1) == 0) { if ((p = strchr(buf, ':')) != NULL) vevent.start = ical_datetime2long(++p, &vevent_type); if (!vevent.start) { ical_log(log, ICAL_VEVENT, ITEMLINE, _("could not retrieve event start time.")); goto cleanup; } } else if (strncasecmp(buf, dtend, sizeof(dtend) - 1) == 0) { if ((p = strchr(buf, ':')) != NULL) vevent.end = ical_datetime2long(++p, &vevent_type); if (!vevent.end) { ical_log(log, ICAL_VEVENT, ITEMLINE, _("could not retrieve event end time.")); goto cleanup; } } else if (strncasecmp (buf, duration, sizeof(duration) - 1) == 0) { if ((vevent.dur = ical_dur2long(buf)) <= 0) { ical_log(log, ICAL_VEVENT, ITEMLINE, _("item duration malformed.")); goto cleanup; } } else if (strncasecmp(buf, rrule, sizeof(rrule) - 1) == 0) { vevent.rpt = ical_read_rrule(log, buf, noskipped, ITEMLINE); } else if (strncasecmp (buf, exdate, sizeof(exdate) - 1) == 0) { ical_read_exdate(&vevent.exc, log, buf, noskipped, ITEMLINE); } else if (strncasecmp (buf, summary, sizeof(summary) - 1) == 0) { vevent.mesg = ical_read_summary(buf); } else if (strncasecmp(buf, alarm, sizeof(alarm) - 1) == 0) { skip_alarm = 1; vevent.has_alarm = 1; } else if (strncasecmp(buf, desc, sizeof(desc) - 1) == 0) { vevent.note = ical_read_note(buf, noskipped, ICAL_VEVENT, ITEMLINE, log); } } } ical_log(log, ICAL_VEVENT, ITEMLINE, _("The ical file seems to be malformed. " "The end of item was not found.")); cleanup: if (vevent.note) mem_free(vevent.note); if (vevent.mesg) mem_free(vevent.mesg); if (vevent.rpt) mem_free(vevent.rpt); LLIST_FREE(&vevent.exc); (*noskipped)++; } static void ical_read_todo(FILE * fdi, FILE * log, unsigned *notodos, unsigned *noskipped, char *buf, char *lstore, unsigned *lineno) { const char endtodo[] = "END:VTODO"; const char summary[] = "SUMMARY"; const char alarm[] = "BEGIN:VALARM"; const char endalarm[] = "END:VALARM"; const char desc[] = "DESCRIPTION"; const int LOWEST = 9; const int ITEMLINE = *lineno; struct { char *mesg, *note; int has_priority, priority; } vtodo; int skip_alarm; memset(&vtodo, 0, sizeof vtodo); skip_alarm = 0; while (ical_readline(fdi, buf, lstore, lineno)) { if (skip_alarm) { /* Need to skip VALARM properties because some keywords could interfere, such as DURATION, SUMMARY,.. */ if (strncasecmp (buf, endalarm, sizeof(endalarm) - 1) == 0) skip_alarm = 0; continue; } if (strncasecmp(buf, endtodo, sizeof(endtodo) - 1) == 0) { if (!vtodo.has_priority) vtodo.priority = LOWEST; if (vtodo.mesg) { ical_store_todo(vtodo.priority, vtodo.mesg, vtodo.note); (*notodos)++; } else { ical_log(log, ICAL_VTODO, ITEMLINE, _("could not retrieve item summary.")); goto cleanup; } return; } else { int tmpint; if (strncasecmp (buf, "PRIORITY:", sizeof("PRIORITY:") - 1) == 0) { sscanf(buf, "%d", &tmpint); if (tmpint <= 9 && tmpint >= 1) { vtodo.priority = tmpint; vtodo.has_priority = 1; } else { ical_log(log, ICAL_VTODO, ITEMLINE, _("item priority is not acceptable " "(must be between 1 and 9).")); vtodo.priority = LOWEST; } } else if (strncasecmp (buf, summary, sizeof(summary) - 1) == 0) { vtodo.mesg = ical_read_summary(buf); } else if (strncasecmp(buf, alarm, sizeof(alarm) - 1) == 0) { skip_alarm = 1; } else if (strncasecmp(buf, desc, sizeof(desc) - 1) == 0) { vtodo.note = ical_read_note(buf, noskipped, ICAL_VTODO, ITEMLINE, log); } } } ical_log(log, ICAL_VTODO, ITEMLINE, _("The ical file seems to be malformed. " "The end of item was not found.")); cleanup: if (vtodo.note) mem_free(vtodo.note); if (vtodo.mesg) mem_free(vtodo.mesg); (*noskipped)++; } /* Import calcurse data. */ void ical_import_data(FILE * stream, FILE * log, unsigned *events, unsigned *apoints, unsigned *todos, unsigned *lines, unsigned *skipped) { const char vevent[] = "BEGIN:VEVENT"; const char vtodo[] = "BEGIN:VTODO"; char buf[BUFSIZ], lstore[BUFSIZ]; int major, minor; ical_readline_init(stream, buf, lstore, lines); RETURN_IF(!ical_chk_header (stream, buf, lstore, lines, &major, &minor), _("Warning: ical header malformed or wrong version number. " "Aborting...")); ical_log_init(log, major, minor); while (ical_readline(stream, buf, lstore, lines)) { (*lines)++; if (strncasecmp(buf, vevent, sizeof(vevent) - 1) == 0) { ical_read_event(stream, log, events, apoints, skipped, buf, lstore, lines); } else if (strncasecmp(buf, vtodo, sizeof(vtodo) - 1) == 0) { ical_read_todo(stream, log, todos, skipped, buf, lstore, lines); } } } /* Export calcurse data. */ void ical_export_data(FILE * stream) { ical_export_header(stream); ical_export_recur_events(stream); ical_export_events(stream); ical_export_recur_apoints(stream); ical_export_apoints(stream); ical_export_todo(stream); ical_export_footer(stream); } calcurse-4.0.0/src/llist.c0000644000175000017500000001253512472326722012334 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include "calcurse.h" /* * Initialize a list. */ void llist_init(llist_t * l) { l->head = NULL; l->tail = NULL; } /* * Free a list, but not the contained data. */ void llist_free(llist_t * l) { llist_item_t *i, *t; for (i = l->head; i; i = t) { t = i->next; mem_free(i); } l->head = NULL; l->tail = NULL; } /* * Free the data contained in a list. */ void llist_free_inner(llist_t * l, llist_fn_free_t fn_free) { llist_item_t *i; for (i = l->head; i; i = i->next) { if (i->data) { fn_free(i->data); i->data = NULL; } } } /* * Get the first item of a list. */ llist_item_t *llist_first(llist_t * l) { return l->head; } /* * Get the nth item of a list. */ llist_item_t *llist_nth(llist_t * l, int n) { llist_item_t *i; if (n < 0) return NULL; for (i = l->head; i && n != 0; n--) i = i->next; return i; } /* * Get the successor of a list item. */ llist_item_t *llist_next(llist_item_t * i) { return i ? i->next : NULL; } /* * Return the successor of a list item if it is matched by some filter * callback. Return NULL otherwise. */ llist_item_t *llist_next_filter(llist_item_t * i, void *data, llist_fn_match_t fn_match) { if (i && i->next && fn_match(i->next->data, data)) return i->next; else return NULL; } /* * Get the actual data of an item. */ void *llist_get_data(llist_item_t * i) { return i ? i->data : NULL; } /* * Add an item at the end of a list. */ void llist_add(llist_t * l, void *data) { llist_item_t *o = mem_malloc(sizeof(llist_item_t)); if (o) { o->data = data; o->next = NULL; if (!l->head) { l->head = l->tail = o; } else { l->tail->next = o; l->tail = o; } } } /* * Add an item to a sorted list. */ void llist_add_sorted(llist_t * l, void *data, llist_fn_cmp_t fn_cmp) { llist_item_t *o = mem_malloc(sizeof(llist_item_t)); llist_item_t *i; if (o) { o->data = data; o->next = NULL; if (!l->head) { l->head = l->tail = o; } else if (fn_cmp(o->data, l->tail->data) >= 0) { l->tail->next = o; l->tail = o; } else if (fn_cmp(o->data, l->head->data) < 0) { o->next = l->head; l->head = o; } else { i = l->head; while (i->next && fn_cmp(o->data, i->next->data) >= 0) i = i->next; o->next = i->next; i->next = o; } } } /* * Remove an item from a list. */ void llist_remove(llist_t * l, llist_item_t * i) { llist_item_t *j = NULL; if (l->head && i == l->head) { l->head = i->next; } else { for (j = l->head; j && j->next != i; j = j->next) ; } if (i) { if (j) j->next = i->next; if (i == l->tail) l->tail = j; mem_free(i); } } /* * Find the first item matched by some filter callback. */ llist_item_t *llist_find_first(llist_t * l, void *data, llist_fn_match_t fn_match) { llist_item_t *i; if (fn_match) { for (i = l->head; i; i = i->next) { if (fn_match(i->data, data)) return i; } } else { for (i = l->head; i; i = i->next) { if (i->data == data) return i; } } return NULL; } /* * Find the next item matched by some filter callback. */ llist_item_t *llist_find_next(llist_item_t * i, void *data, llist_fn_match_t fn_match) { if (i) { i = i->next; if (fn_match) { for (; i; i = i->next) { if (fn_match(i->data, data)) return i; } } else { for (; i; i = i->next) { if (i->data == data) return i; } } } return NULL; } /* * Find the nth item matched by some filter callback. */ llist_item_t *llist_find_nth(llist_t * l, int n, void *data, llist_fn_match_t fn_match) { llist_item_t *i; if (n < 0) return NULL; if (fn_match) { for (i = l->head; i; i = i->next) { if (fn_match(i->data, data) && (n-- == 0)) return i; } } else { for (i = l->head; i; i = i->next) { if ((i->data == data) && (n-- == 0)) return i; } } return NULL; } calcurse-4.0.0/src/ui-day.c0000644000175000017500000005560312472326722012400 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include "calcurse.h" struct day_item day_cut[38] = { {0, 0, {NULL}} }; /* Request the user to enter a new time. */ static int day_edit_time(int time, unsigned *new_hour, unsigned *new_minute) { char *timestr = date_sec2date_str(time, "%H:%M"); const char *msg_time = _("Enter start time ([hh:mm] or [hhmm]):"); const char *enter_str = _("Press [Enter] to continue"); const char *fmt_msg = _("You entered an invalid time, should be [hh:mm] or [hhmm]"); for (;;) { status_mesg(msg_time, ""); if (updatestring(win[STA].p, ×tr, 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); } } } /* Request the user to enter a new time or duration. */ static int day_edit_duration(int start, int dur, unsigned *new_duration) { char *timestr = date_sec2date_str(start + dur, "%H:%M"); const char *msg_time = _("Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):"); 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; for (;;) { int ret; status_mesg(msg_time, ""); ret = updatestring(win[STA].p, ×tr, 0, 1); if (ret == GETSTRING_ESC) { return 0; } 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; break; } else { status_mesg(fmt_msg, enter_str); wgetch(win[KEY].p); } } mem_free(timestr); return 1; } /* Request the user to enter a new end time or duration. */ 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)) break; if (!update_dur) { *start = update_time_in_date(*start, hr, mn); return; } newtime = update_time_in_date(*start, hr, mn); if (newtime < *start + *dur) { *dur -= (newtime - *start); *start = newtime; valid_date = 1; } else { status_mesg(msg_wrong_time, msg_enter); wgetch(win[KEY].p); valid_date = 0; } } while (valid_date == 0); } static void update_duration(long *start, long *dur) { unsigned newdur; if (day_edit_duration(*start, *dur, &newdur)) *dur = newdur; } static void update_desc(char **desc) { status_mesg(_("Enter the new item description:"), ""); updatestring(win[STA].p, desc, 0, 1); } static void update_rept(struct rpt **rpt, const long start) { int newtype, newfreq; long newuntil; char *freqstr = NULL, *timstr, *outstr; const char *msg_rpt_prefix = _("Enter the new repetition type:"); const char *msg_rpt_daily = _("(d)aily"); const char *msg_rpt_weekly = _("(w)eekly"); const char *msg_rpt_monthly = _("(m)onthly"); const char *msg_rpt_yearly = _("(y)early"); /* Find the current repetition type. */ const char *rpt_current; char *msg_rpt_current; switch (recur_def2char((*rpt)->type)) { case 'D': rpt_current = msg_rpt_daily; break; case 'W': rpt_current = msg_rpt_weekly; break; case 'M': rpt_current = msg_rpt_monthly; break; case 'Y': rpt_current = msg_rpt_yearly; break; default: /* NOTREACHED, but makes the compiler happier. */ rpt_current = msg_rpt_daily; } asprintf(&msg_rpt_current, _("(currently using %s)"), rpt_current); char *msg_rpt_asktype; asprintf(&msg_rpt_asktype, "%s %s, %s, %s, %s ? %s", msg_rpt_prefix, msg_rpt_daily, msg_rpt_weekly, msg_rpt_monthly, msg_rpt_yearly, msg_rpt_current); const char *msg_rpt_choice = _("[dwmy]"); const char *msg_wrong_freq = _("The frequence you entered is not valid."); const char *msg_wrong_time = _("Invalid time: start time must be before end time!"); const char *msg_wrong_date = _("The entered date is not valid."); const char *msg_fmts = _("Possible formats are [%s] or '0' for an endless repetition."); const char *msg_enter = _("Press [Enter] to continue"); switch (status_ask_choice(msg_rpt_asktype, msg_rpt_choice, 4)) { case 1: newtype = 'D'; break; case 2: newtype = 'W'; break; case 3: newtype = 'M'; break; case 4: newtype = 'Y'; break; default: goto cleanup; } do { status_mesg(_("Enter the new repetition frequence:"), ""); mem_free(freqstr); asprintf(&freqstr, "%d", (*rpt)->freq); if (updatestring(win[STA].p, &freqstr, 0, 1) != GETSTRING_VALID) { goto cleanup; } newfreq = atoi(freqstr); if (newfreq == 0) { status_mesg(msg_wrong_freq, msg_enter); wgetch(win[KEY].p); } } while (newfreq == 0); for (;;) { struct tm lt; time_t t; struct date new_date; int newmonth, newday, newyear; asprintf(&outstr, _("Enter the new ending date: [%s] or '0'"), DATEFMT_DESC(conf.input_datefmt)); status_mesg(outstr, ""); mem_free(outstr); timstr = date_sec2date_str((*rpt)->until, DATEFMT(conf.input_datefmt)); if (updatestring(win[STA].p, &timstr, 0, 1) != GETSTRING_VALID) { goto cleanup; } if (strcmp(timstr, "0") == 0) { newuntil = 0; break; } if (!parse_date (timstr, conf.input_datefmt, &newyear, &newmonth, &newday, ui_calendar_get_slctd_day())) { asprintf(&outstr, msg_fmts, DATEFMT_DESC(conf.input_datefmt)); status_mesg(msg_wrong_date, outstr); mem_free(outstr); wgetch(win[KEY].p); continue; } t = start; localtime_r(&t, <); new_date.dd = newday; new_date.mm = newmonth; new_date.yyyy = newyear; newuntil = date2sec(new_date, lt.tm_hour, lt.tm_min); if (newuntil >= start) break; status_mesg(msg_wrong_time, msg_enter); wgetch(win[KEY].p); } (*rpt)->type = recur_char2def(newtype); (*rpt)->freq = newfreq; (*rpt)->until = newuntil; cleanup: mem_free(msg_rpt_current); mem_free(msg_rpt_asktype); mem_free(freqstr); mem_free(timstr); } /* Edit an already existing item. */ void ui_day_item_edit(void) { struct recur_event *re; struct event *e; struct recur_apoint *ra; struct apoint *a; int need_check_notify = 0; if (day_item_count(0) <= 0) return; struct day_item *p = day_get_item(listbox_get_sel(&lb_apt)); switch (p->type) { case RECUR_EVNT: re = p->item.rev; const char *choice_recur_evnt[2] = { _("Description"), _("Repetition"), }; switch (status_ask_simplechoice (_("Edit: "), choice_recur_evnt, 2)) { case 1: update_desc(&re->mesg); io_set_modified(); break; case 2: update_rept(&re->rpt, re->day); io_set_modified(); break; default: return; } break; case EVNT: e = p->item.ev; update_desc(&e->mesg); io_set_modified(); break; case RECUR_APPT: ra = p->item.rapt; const char *choice_recur_appt[5] = { _("Start time"), _("End time"), _("Description"), _("Repetition"), _("Move"), }; switch (status_ask_simplechoice (_("Edit: "), choice_recur_appt, 5)) { case 1: need_check_notify = 1; update_start_time(&ra->start, &ra->dur, 1); io_set_modified(); break; case 2: update_duration(&ra->start, &ra->dur); io_set_modified(); break; case 3: if (notify_bar()) need_check_notify = notify_same_recur_item(ra); update_desc(&ra->mesg); io_set_modified(); break; case 4: need_check_notify = 1; update_rept(&ra->rpt, ra->start); io_set_modified(); break; case 5: need_check_notify = 1; update_start_time(&ra->start, &ra->dur, 0); io_set_modified(); break; default: return; } break; case APPT: a = p->item.apt; const char *choice_appt[4] = { _("Start time"), _("End time"), _("Description"), _("Move"), }; switch (status_ask_simplechoice (_("Edit: "), choice_appt, 4)) { case 1: need_check_notify = 1; update_start_time(&a->start, &a->dur, 1); io_set_modified(); break; case 2: update_duration(&a->start, &a->dur); io_set_modified(); break; case 3: if (notify_bar()) need_check_notify = notify_same_item(a->start); update_desc(&a->mesg); io_set_modified(); break; case 4: need_check_notify = 1; update_start_time(&a->start, &a->dur, 0); io_set_modified(); break; default: return; } break; default: break; } ui_calendar_monthly_view_cache_set_invalid(); if (need_check_notify) notify_check_next_app(1); } /* Pipe an appointment or event to an external program. */ void ui_day_item_pipe(void) { char cmd[BUFSIZ] = ""; char const *arg[] = { cmd, NULL }; int pout; int pid; FILE *fpout; if (day_item_count(0) <= 0) return; struct day_item *p = day_get_item(listbox_get_sel(&lb_apt)); status_mesg(_("Pipe item to external command:"), ""); if (getstring(win[STA].p, cmd, BUFSIZ, 0, 1) != GETSTRING_VALID) return; wins_prepare_external(); if ((pid = shell_exec(NULL, &pout, *arg, arg))) { fpout = fdopen(pout, "w"); switch (p->type) { case RECUR_EVNT: recur_event_write(p->item.rev, fpout); break; case EVNT: event_write(p->item.ev, fpout); break; case RECUR_APPT: recur_apoint_write(p->item.rapt, fpout); break; case APPT: apoint_write(p->item.apt, fpout); break; default: break; } fclose(fpout); child_wait(NULL, &pout, pid); press_any_key(); } wins_unprepare_external(); } /* * Add an item in either the appointment or the event list, * depending if the start time is entered or not. */ void ui_day_item_add(void) { #define LTIME 6 #define LDUR 12 const char *mesg_1 = _("Enter start time ([hh:mm] or [hhmm]), leave blank for an all-day event:"); const char *mesg_2 = _("Enter end time ([hh:mm], [hhmm]) or duration ([+hh:mm], [+xxxdxxhxxm]):"); const char *mesg_3 = _("Enter description:"); const char *format_message_1 = _("You entered an invalid start time, should be [hh:mm] or [hhmm]"); const char *format_message_2 = _("Invalid end time/duration, should be [hh:mm], [hhmm], [+hh:mm], [+xxxdxxhxxm] or [+mm]"); const char *enter_str = _("Press [Enter] to continue"); char item_time[LDUR] = ""; char item_mesg[BUFSIZ] = ""; long apoint_start; unsigned heures, minutes; unsigned apoint_duration; unsigned end_h, end_m; int is_appointment = 1; /* Get the starting time */ for (;;) { status_mesg(mesg_1, ""); if (getstring(win[STA].p, item_time, LTIME, 0, 1) == GETSTRING_ESC) return; if (strlen(item_time) == 0) { is_appointment = 0; break; } if (parse_time(item_time, &heures, &minutes) == 1) break; status_mesg(format_message_1, enter_str); wgetch(win[KEY].p); } /* * Check if an event or appointment is entered, * depending on the starting time, and record the * corresponding item. */ if (is_appointment) { /* Get the appointment duration */ item_time[0] = '\0'; for (;;) { status_mesg(mesg_2, ""); if (getstring(win[STA].p, item_time, LDUR, 0, 1) == GETSTRING_ESC) return; if (strlen(item_time) == 0) { apoint_duration = 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; } break; } status_mesg(format_message_2, enter_str); wgetch(win[KEY].p); } } status_mesg(mesg_3, ""); 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); if (notify_bar()) notify_check_added(item_mesg, apoint_start, 0L); } else { event_new(item_mesg, 0L, date2sec(*ui_calendar_get_slctd_day(), 0, 0), 1); } io_set_modified(); } ui_calendar_monthly_view_cache_set_invalid(); wins_erase_status_bar(); } /* Delete an item from the appointment list. */ void ui_day_item_delete(unsigned reg) { const char *del_app_str = _("Do you really want to delete this item?"); const char *erase_warning = _("This item is recurrent. " "Delete (a)ll occurences or just this (o)ne?"); const char *erase_choices = _("[ao]"); const int nb_erase_choices = 2; const char *note_warning = _("This item has a note attached to it. " "Delete (i)tem or just its (n)ote?"); const char *note_choices = _("[in]"); const int nb_note_choices = 2; long date = ui_calendar_get_slctd_day_sec(); if (day_item_count(0) <= 0) return; struct day_item *p = day_get_item(listbox_get_sel(&lb_apt)); if (conf.confirm_delete) { if (status_ask_bool(del_app_str) != 1) { wins_erase_status_bar(); return; } } if (day_item_get_note(p)) { switch (status_ask_choice (note_warning, note_choices, nb_note_choices)) { case 1: break; case 2: day_item_erase_note(p); io_set_modified(); return; default: /* User escaped */ return; } } if (p->type == RECUR_EVNT || p->type == RECUR_APPT) { switch (status_ask_choice (erase_warning, erase_choices, nb_erase_choices)) { case 1: break; case 2: day_item_add_exc(p, date); io_set_modified(); return; default: return; } } ui_day_item_cut_free(reg); p = day_cut_item(date, listbox_get_sel(&lb_apt)); day_cut[reg].type = p->type; day_cut[reg].item = p->item; io_set_modified(); ui_calendar_monthly_view_cache_set_invalid(); } /* * Ask user for repetition characteristics: * o repetition type: daily, weekly, monthly, yearly * o repetition frequence: every X days, weeks, ... * o repetition end date * and then delete the selected item to recreate it as a recurrent one */ void ui_day_item_repeat(void) { struct tm lt; time_t t; int year = 0, month = 0, day = 0; struct date until_date; char *outstr; char user_input[BUFSIZ] = ""; const char *msg_rpt_prefix = _("Enter the repetition type:"); const char *msg_rpt_daily = _("(d)aily"); const char *msg_rpt_weekly = _("(w)eekly"); const char *msg_rpt_monthly = _("(m)onthly"); const char *msg_rpt_yearly = _("(y)early"); const char *msg_type_choice = _("[dwmy]"); const char *mesg_freq_1 = _("Enter the repetition frequence:"); const char *mesg_wrong_freq = _("The frequence you entered is not valid."); const char *mesg_until_1 = _("Enter the ending date: [%s] or '0' for an endless repetition"); const char *mesg_wrong_1 = _("The entered date is not valid."); const char *mesg_wrong_2 = _("Possible formats are [%s] or '0' for an endless repetition"); const char *wrong_type_1 = _("This item is already a repeated one."); const char *wrong_type_2 = _("Press [ENTER] to continue."); const char *mesg_older = _("Sorry, the date you entered is older than the item start time."); char *msg_asktype; asprintf(&msg_asktype, "%s %s, %s, %s, %s", msg_rpt_prefix, msg_rpt_daily, msg_rpt_weekly, msg_rpt_monthly, msg_rpt_yearly); int type = 0, freq = 0; int item_nb; struct day_item *p; struct recur_apoint *ra; long until, date; if (day_item_count(0) <= 0) goto cleanup; item_nb = listbox_get_sel(&lb_apt); p = day_get_item(item_nb); if (p->type != APPT && p->type != EVNT) { status_mesg(wrong_type_1, wrong_type_2); wgetch(win[KEY].p); goto cleanup; } switch (status_ask_choice(msg_asktype, msg_type_choice, 4)) { case 1: type = RECUR_DAILY; break; case 2: type = RECUR_WEEKLY; break; case 3: type = RECUR_MONTHLY; break; case 4: type = RECUR_YEARLY; break; default: goto cleanup; } while (freq == 0) { status_mesg(mesg_freq_1, ""); if (getstring(win[STA].p, user_input, BUFSIZ, 0, 1) != GETSTRING_VALID) goto cleanup; freq = atoi(user_input); if (freq == 0) { status_mesg(mesg_wrong_freq, wrong_type_2); wgetch(win[KEY].p); } user_input[0] = '\0'; } for (;;) { asprintf(&outstr, mesg_until_1, DATEFMT_DESC(conf.input_datefmt)); status_mesg(outstr, ""); mem_free(outstr); if (getstring(win[STA].p, user_input, BUFSIZ, 0, 1) != GETSTRING_VALID) goto cleanup; if (strlen(user_input) == 1 && strcmp(user_input, "0") == 0) { until = 0; break; } if (parse_date(user_input, conf.input_datefmt, &year, &month, &day, ui_calendar_get_slctd_day())) { t = p->start; localtime_r(&t, <); until_date.dd = day; until_date.mm = month; until_date.yyyy = year; until = date2sec(until_date, lt.tm_hour, lt.tm_min); if (until >= p->start) break; status_mesg(mesg_older, wrong_type_2); wgetch(win[KEY].p); } else { asprintf(&outstr, mesg_wrong_2, DATEFMT_DESC(conf.input_datefmt)); status_mesg(mesg_wrong_1, outstr); mem_free(outstr); wgetch(win[KEY].p); } } date = ui_calendar_get_slctd_day_sec(); if (p->type == EVNT) { struct event *ev = p->item.ev; recur_event_new(ev->mesg, ev->note, ev->day, ev->id, type, freq, until, NULL); } else if (p->type == APPT) { struct apoint *apt = p->item.apt; ra = recur_apoint_new(apt->mesg, apt->note, apt->start, apt->dur, apt->state, type, freq, until, NULL); if (notify_bar()) notify_check_repeated(ra); } else { EXIT(_("wrong item type")); /* NOTREACHED */ } ui_day_item_cut_free(REG_BLACK_HOLE); p = day_cut_item(date, item_nb); day_cut[REG_BLACK_HOLE].type = p->type; day_cut[REG_BLACK_HOLE].item = p->item; io_set_modified(); ui_calendar_monthly_view_cache_set_invalid(); cleanup: mem_free(msg_asktype); } /* Free the current cut item, if any. */ void ui_day_item_cut_free(unsigned reg) { if (!day_cut[reg].type) { /* No previously cut item, don't free anything. */ return; } switch (day_cut[reg].type) { case APPT: apoint_free(day_cut[reg].item.apt); break; case EVNT: event_free(day_cut[reg].item.ev); break; case RECUR_APPT: recur_apoint_free(day_cut[reg].item.rapt); break; case RECUR_EVNT: recur_event_free(day_cut[reg].item.rev); break; default: break; } } /* Copy an item, so that it can be pasted somewhere else later. */ void ui_day_item_copy(unsigned reg) { if (day_item_count(0) <= 0 || reg == REG_BLACK_HOLE) return; struct day_item *item = day_get_item(listbox_get_sel(&lb_apt)); ui_day_item_cut_free(reg); day_item_fork(item, &day_cut[reg]); } /* Paste a previously cut item. */ void ui_day_item_paste(unsigned reg) { struct day_item day; if (reg == REG_BLACK_HOLE || !day_cut[reg].type) return; day_item_fork(&day_cut[reg], &day); day_paste_item(&day, ui_calendar_get_slctd_day_sec()); io_set_modified(); ui_calendar_monthly_view_cache_set_invalid(); } void ui_day_load_items(void) { listbox_load_items(&lb_apt, day_item_count(1)); } void ui_day_sel_reset(void) { listbox_set_sel(&lb_apt, 0); } void ui_day_sel_move(int delta) { listbox_sel_move(&lb_apt, delta); } /* Display appointments in the corresponding panel. */ void ui_day_draw(int n, WINDOW *win, int y, int hilt, void *cb_data) { struct date slctd_date = *ui_calendar_get_slctd_day(); long date = date2sec(slctd_date, 0, 0); struct day_item *item = day_get_item(n); int width = lb_apt.sw.w; hilt = hilt && (wins_slctd() == APP); if (item->type == EVNT || item->type == RECUR_EVNT) { day_display_item(item, win, !hilt, width, y, 1); } else if (item->type == APPT || item->type == RECUR_APPT) { day_display_item_date(item, win, !hilt, date, y, 1); day_display_item(item, win, !hilt, width, y + 1, 1); } else if (item->type == DAY_HEADING) { unsigned x = width - (strlen(_(monthnames[slctd_date.mm - 1])) + 17); custom_apply_attr(win, ATTR_HIGHEST); mvwprintw(win, y, x, "%s %s %02d, %04d", ui_calendar_get_pom(date), _(monthnames[slctd_date.mm - 1]), slctd_date.dd, slctd_date.yyyy); custom_remove_attr(win, ATTR_HIGHEST); } else if (item->type == DAY_SEPARATOR) { wmove(win, y, 0); whline(win, 0, width); } } enum listbox_row_type ui_day_row_type(int n, void *cb_data) { struct day_item *item = day_get_item(n); if (item->type == DAY_HEADING || item->type == DAY_SEPARATOR) return LISTBOX_ROW_CAPTION; else return LISTBOX_ROW_TEXT; } int ui_day_height(int n, void *cb_data) { struct day_item *item = day_get_item(n); if (item->type == APPT || item->type == RECUR_APPT) return 3; else return 1; } /* Updates the Appointment panel */ void ui_day_update_panel(int which_pan) { listbox_display(&lb_apt); } void ui_day_popup_item(void) { if (day_item_count(0) <= 0) return; struct day_item *item = day_get_item(listbox_get_sel(&lb_apt)); day_popup_item(item); } void ui_day_flag(void) { if (day_item_count(0) <= 0) return; struct day_item *item = day_get_item(listbox_get_sel(&lb_apt)); day_item_switch_notify(item); io_set_modified(); } void ui_day_view_note(void) { if (day_item_count(0) <= 0) return; struct day_item *item = day_get_item(listbox_get_sel(&lb_apt)); day_view_note(item, conf.pager); } void ui_day_edit_note(void) { if (day_item_count(0) <= 0) return; struct day_item *item = day_get_item(listbox_get_sel(&lb_apt)); day_edit_note(item, conf.editor); io_set_modified(); } calcurse-4.0.0/src/calcurse.c0000644000175000017500000004030512472326722013002 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include "calcurse.h" #define HANDLE_KEY(key, fn) case key: fn(); break; int count, reg; /* * Store the events and appointments for the selected day and reset the * appointment highlight pointer if a new day was selected. */ static void do_storage(int day_changed) { day_process_storage(ui_calendar_get_slctd_day(), day_changed); ui_day_load_items(); if (day_changed) ui_day_sel_reset(); } static inline void key_generic_change_view(void) { wins_reset_status_page(); wins_slctd_next(); wins_update(FLAG_ALL); } static inline void key_generic_other_cmd(void) { wins_other_status_page(wins_slctd()); wins_update(FLAG_STA); } static inline void key_generic_goto(void) { wins_erase_status_bar(); ui_calendar_set_current_date(); ui_calendar_change_day(conf.input_datefmt); do_storage(1); wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); } static inline void key_generic_goto_today(void) { wins_erase_status_bar(); ui_calendar_set_current_date(); ui_calendar_goto_today(); do_storage(1); wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); } static inline void key_view_item(void) { if (wins_slctd() == APP) ui_day_popup_item(); else if (wins_slctd() == TOD) ui_todo_popup_item(); wins_update(FLAG_ALL); } static inline void key_generic_config_menu(void) { wins_erase_status_bar(); custom_config_main(); do_storage(0); wins_update(FLAG_ALL); } static inline void key_generic_add_appt(void) { ui_day_item_add(); do_storage(1); wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); } static inline void key_generic_add_todo(void) { ui_todo_add(); wins_update(FLAG_TOD | FLAG_STA); } static inline void key_add_item(void) { switch (wins_slctd()) { case APP: ui_day_item_add(); do_storage(0); wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); break; case TOD: ui_todo_add(); wins_update(FLAG_TOD | FLAG_STA); break; default: break; } } static inline void key_edit_item(void) { if (wins_slctd() == APP) { ui_day_item_edit(); do_storage(0); wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); } else if (wins_slctd() == TOD) { ui_todo_edit(); wins_update(FLAG_TOD | FLAG_STA); } } static inline void key_del_item(void) { if (wins_slctd() == APP) { ui_day_item_delete(reg); do_storage(0); wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); } else if (wins_slctd() == TOD) { ui_todo_delete(); wins_update(FLAG_TOD | FLAG_STA); } } static inline void key_generic_copy(void) { if (wins_slctd() == APP) { ui_day_item_copy(reg); do_storage(0); wins_update(FLAG_CAL | FLAG_APP); } } static inline void key_generic_paste(void) { if (wins_slctd() == APP) { ui_day_item_paste(reg); do_storage(0); wins_update(FLAG_CAL | FLAG_APP); } } static inline void key_repeat_item(void) { if (wins_slctd() == APP) ui_day_item_repeat(); do_storage(0); wins_update(FLAG_CAL | FLAG_APP | FLAG_STA); } static inline void key_flag_item(void) { if (wins_slctd() == APP) { ui_day_flag(); do_storage(0); wins_update(FLAG_APP); } else if (wins_slctd() == TOD) { ui_todo_flag(); wins_update(FLAG_TOD); } } static inline void key_pipe_item(void) { if (wins_slctd() == APP) ui_day_item_pipe(); else if (wins_slctd() == TOD) ui_todo_pipe(); wins_update(FLAG_ALL); } static inline void change_priority(int diff) { if (wins_slctd() == TOD) { ui_todo_chg_priority(diff); wins_update(FLAG_TOD); } } static inline void key_raise_priority(void) { change_priority(1); } static inline void key_lower_priority(void) { change_priority(-1); } static inline void key_edit_note(void) { if (wins_slctd() == APP) { ui_day_edit_note(); do_storage(0); } else if (wins_slctd() == TOD) { ui_todo_edit_note(); } wins_update(FLAG_ALL); } static inline void key_view_note(void) { if (wins_slctd() == APP) ui_day_view_note(); else if (wins_slctd() == TOD) ui_todo_view_note(); wins_update(FLAG_ALL); } static inline void key_generic_help(void) { display_help(NULL); wins_update(FLAG_ALL); } static inline void key_generic_save(void) { io_save_cal(IO_SAVE_DISPLAY_BAR); wins_update(FLAG_STA); } static inline void key_generic_reload(void) { io_reload_data(); do_storage(0); notify_check_next_app(1); ui_calendar_monthly_view_cache_set_invalid(); wins_update(FLAG_ALL); } static inline void key_generic_import(void) { wins_erase_status_bar(); io_import_data(IO_IMPORT_ICAL, NULL); ui_calendar_monthly_view_cache_set_invalid(); do_storage(0); wins_update(FLAG_ALL); } static inline void key_generic_export() { const char *export_msg = _("Export to (i)cal or (p)cal format?"); const char *export_choices = _("[ip]"); const int nb_export_choices = 2; wins_erase_status_bar(); switch (status_ask_choice (export_msg, export_choices, nb_export_choices)) { case 1: io_export_data(IO_EXPORT_ICAL); break; case 2: io_export_data(IO_EXPORT_PCAL); break; default: /* User escaped */ break; } do_storage(0); wins_update(FLAG_ALL); } static inline void key_generic_prev_day(void) { ui_calendar_move(DAY_PREV, count); do_storage(1); wins_update(FLAG_CAL | FLAG_APP); } static inline void key_move_left(void) { if (wins_slctd() == CAL) key_generic_prev_day(); } static inline void key_generic_next_day(void) { ui_calendar_move(DAY_NEXT, count); do_storage(1); wins_update(FLAG_CAL | FLAG_APP); } static inline void key_move_right(void) { if (wins_slctd() == CAL) key_generic_next_day(); } static inline void key_generic_prev_week(void) { ui_calendar_move(WEEK_PREV, count); do_storage(1); wins_update(FLAG_CAL | FLAG_APP); } static inline void key_move_up(void) { if (wins_slctd() == CAL) { key_generic_prev_week(); } else if (wins_slctd() == APP) { ui_day_sel_move(-1); wins_update(FLAG_APP); } else if (wins_slctd() == TOD) { ui_todo_sel_move(-1); wins_update(FLAG_TOD); } } static inline void key_generic_next_week(void) { ui_calendar_move(WEEK_NEXT, count); do_storage(1); wins_update(FLAG_CAL | FLAG_APP); } static inline void key_move_down(void) { if (wins_slctd() == CAL) { key_generic_next_week(); } else if (wins_slctd() == APP) { ui_day_sel_move(1); wins_update(FLAG_APP); } else if (wins_slctd() == TOD) { ui_todo_sel_move(1); wins_update(FLAG_TOD); } } static inline void key_generic_prev_month(void) { ui_calendar_move(MONTH_PREV, count); do_storage(1); wins_update(FLAG_CAL | FLAG_APP); } static inline void key_generic_next_month(void) { ui_calendar_move(MONTH_NEXT, count); do_storage(1); wins_update(FLAG_CAL | FLAG_APP); } static inline void key_generic_prev_year(void) { ui_calendar_move(YEAR_PREV, count); do_storage(1); wins_update(FLAG_CAL | FLAG_APP); } static inline void key_generic_next_year(void) { ui_calendar_move(YEAR_NEXT, count); do_storage(1); wins_update(FLAG_CAL | FLAG_APP); } static inline void key_start_of_week(void) { if (wins_slctd() == CAL) { ui_calendar_move(WEEK_START, count); do_storage(1); wins_update(FLAG_CAL | FLAG_APP); } } static inline void key_end_of_week(void) { if (wins_slctd() == CAL) { ui_calendar_move(WEEK_END, count); do_storage(1); wins_update(FLAG_CAL | FLAG_APP); } } static inline void key_generic_scroll_up(void) { if (wins_slctd() == CAL) { ui_calendar_view_prev(); wins_update(FLAG_CAL | FLAG_APP); } } static inline void key_generic_scroll_down(void) { if (wins_slctd() == CAL) { ui_calendar_view_next(); wins_update(FLAG_CAL | FLAG_APP); } } static inline void key_generic_quit(void) { if (conf.auto_save) io_save_cal(IO_SAVE_DISPLAY_BAR); if (conf.auto_gc) note_gc(); if (conf.confirm_quit) { if (status_ask_bool(_("Do you really want to quit?")) == 1) { exit_calcurse(EXIT_SUCCESS); } else { wins_erase_status_bar(); wins_update(FLAG_STA); } } else { exit_calcurse(EXIT_SUCCESS); } } static inline void key_generic_cmd(void) { char cmd[BUFSIZ] = ""; char *cmd_name; int valid = 0, force = 0; char *error_msg; status_mesg(_("Command:"), ""); if (getstring(win[STA].p, cmd, BUFSIZ, 0, 1) != GETSTRING_VALID) goto cleanup; cmd_name = strtok(cmd, " "); if (cmd_name[strlen(cmd_name) - 1] == '!') { cmd_name[strlen(cmd_name) - 1] = '\0'; force = 1; } if (!strcmp(cmd_name, "write") || !strcmp(cmd_name, "w") || !strcmp(cmd_name, "wq")) { io_save_cal(IO_SAVE_DISPLAY_BAR); valid = 1; } if (!strcmp(cmd_name, "quit") || !strcmp(cmd_name, "q") || !strcmp(cmd_name, "wq")) { if (force || !conf.confirm_quit || status_ask_bool( _("Do you really want to quit?")) == 1) exit_calcurse(EXIT_SUCCESS); else wins_erase_status_bar(); valid = 1; } if (!strcmp(cmd_name, "help")) { char *topic = strtok(NULL, " "); if (!display_help(topic)) { asprintf(&error_msg, _("Help topic does not exist: %s"), topic); warnbox(error_msg); mem_free(error_msg); } valid = 1; } if (!valid) { asprintf(&error_msg, _("No such command: %s"), cmd); warnbox(error_msg); mem_free(error_msg); } cleanup: wins_update(FLAG_ALL); } /* * Calcurse is a text-based personal organizer which helps keeping track * of events and everyday tasks. It contains a calendar, a 'todo' list, * and puts your appointments in order. The user interface is configurable, * and one can choose between different color schemes and layouts. * All of the commands are documented within an online help system. */ int main(int argc, char **argv) { int no_data_file = 1; #if ENABLE_NLS setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); #endif /* ENABLE_NLS */ /* Thread-safe data structure init */ apoint_llist_init(); recur_apoint_llist_init(); /* Initialize non-thread-safe data structures. */ event_llist_init(); recur_event_llist_init(); todo_init_list(); /* * Begin by parsing and handling command line arguments. * The data path is also initialized here. */ if (parse_args(argc, argv)) { /* Non-interactive mode. */ exit_calcurse(EXIT_SUCCESS); } else { no_data_file = io_check_data_files(); dmon_stop(); io_set_lock(); } /* Begin of interactive mode with ncurses interface. */ sigs_init(); /* signal handling init */ initscr(); /* start the curses mode */ cbreak(); /* control chars generate a signal */ noecho(); /* controls echoing of typed chars */ curs_set(0); /* make cursor invisible */ ui_calendar_set_current_date(); notify_init_vars(); wins_get_config(); /* Check if terminal supports color. */ if (has_colors()) { colorize = 1; background = COLOR_BLACK; foreground = COLOR_WHITE; start_color(); #ifdef NCURSES_VERSION if (use_default_colors() != ERR) { background = -1; foreground = -1; } #endif /* NCURSES_VERSION */ /* Color assignment */ init_pair(COLR_RED, COLOR_RED, background); init_pair(COLR_GREEN, COLOR_GREEN, background); init_pair(COLR_YELLOW, COLOR_YELLOW, background); init_pair(COLR_BLUE, COLOR_BLUE, background); init_pair(COLR_MAGENTA, COLOR_MAGENTA, background); init_pair(COLR_CYAN, COLOR_CYAN, background); init_pair(COLR_DEFAULT, foreground, background); init_pair(COLR_HIGH, COLOR_BLACK, COLOR_GREEN); init_pair(COLR_CUSTOM, COLOR_RED, background); } else { colorize = 0; background = COLOR_BLACK; } vars_init(); wins_init(); /* Default to the calendar panel -- this is overridden later. */ wins_slctd_set(CAL); notify_init_bar(); wins_reset_status_page(); /* * Read the data from files : first the user * configuration (the display is then updated), and then * the todo list, appointments and events. */ config_load(); wins_erase_status_bar(); io_load_keys(conf.pager); io_load_data(NULL); io_unset_modified(); wins_slctd_set(conf.default_panel); wins_resize(); /* * Refresh the hidden key handler window here to prevent wgetch() from * implicitly calling wrefresh() later (causing ncurses race conditions). */ wins_wrefresh(win[KEY].p); if (conf.system_dialogs) { wins_update(FLAG_ALL); io_startup_screen(no_data_file); } do_storage(1); ui_todo_load_items(); ui_todo_sel_reset(); wins_update(FLAG_ALL); /* Start miscellaneous threads. */ if (notify_bar()) notify_start_main_thread(); ui_calendar_start_date_thread(); if (conf.periodic_save > 0) io_start_psave_thread(); /* User input */ for (;;) { int key; if (resize) { resize = 0; wins_reset(); } if (want_reload) { want_reload = 0; key_generic_reload(); } key = keys_getch(win[KEY].p, &count, ®); switch (key) { case KEY_GENERIC_REDRAW: resize = 1; break; HANDLE_KEY(KEY_GENERIC_CHANGE_VIEW, key_generic_change_view); HANDLE_KEY(KEY_GENERIC_OTHER_CMD, key_generic_other_cmd); HANDLE_KEY(KEY_GENERIC_GOTO, key_generic_goto); HANDLE_KEY(KEY_GENERIC_GOTO_TODAY, key_generic_goto_today); HANDLE_KEY(KEY_VIEW_ITEM, key_view_item); HANDLE_KEY(KEY_GENERIC_CONFIG_MENU, key_generic_config_menu); HANDLE_KEY(KEY_GENERIC_ADD_APPT, key_generic_add_appt); HANDLE_KEY(KEY_GENERIC_ADD_TODO, key_generic_add_todo); HANDLE_KEY(KEY_ADD_ITEM, key_add_item); HANDLE_KEY(KEY_EDIT_ITEM, key_edit_item); HANDLE_KEY(KEY_DEL_ITEM, key_del_item); HANDLE_KEY(KEY_GENERIC_COPY, key_generic_copy); HANDLE_KEY(KEY_GENERIC_PASTE, key_generic_paste); HANDLE_KEY(KEY_REPEAT_ITEM, key_repeat_item); HANDLE_KEY(KEY_FLAG_ITEM, key_flag_item); HANDLE_KEY(KEY_PIPE_ITEM, key_pipe_item); HANDLE_KEY(KEY_RAISE_PRIORITY, key_raise_priority); HANDLE_KEY(KEY_LOWER_PRIORITY, key_lower_priority); HANDLE_KEY(KEY_EDIT_NOTE, key_edit_note); HANDLE_KEY(KEY_VIEW_NOTE, key_view_note); HANDLE_KEY(KEY_GENERIC_HELP, key_generic_help); HANDLE_KEY(KEY_GENERIC_SAVE, key_generic_save); HANDLE_KEY(KEY_GENERIC_RELOAD, key_generic_reload); HANDLE_KEY(KEY_GENERIC_IMPORT, key_generic_import); HANDLE_KEY(KEY_GENERIC_EXPORT, key_generic_export); HANDLE_KEY(KEY_GENERIC_PREV_DAY, key_generic_prev_day); HANDLE_KEY(KEY_MOVE_LEFT, key_move_left); HANDLE_KEY(KEY_GENERIC_NEXT_DAY, key_generic_next_day); HANDLE_KEY(KEY_MOVE_RIGHT, key_move_right); HANDLE_KEY(KEY_GENERIC_PREV_WEEK, key_generic_prev_week); HANDLE_KEY(KEY_MOVE_UP, key_move_up); HANDLE_KEY(KEY_GENERIC_NEXT_WEEK, key_generic_next_week); HANDLE_KEY(KEY_MOVE_DOWN, key_move_down); HANDLE_KEY(KEY_GENERIC_PREV_MONTH, key_generic_prev_month); HANDLE_KEY(KEY_GENERIC_NEXT_MONTH, key_generic_next_month); HANDLE_KEY(KEY_GENERIC_PREV_YEAR, key_generic_prev_year); HANDLE_KEY(KEY_GENERIC_NEXT_YEAR, key_generic_next_year); HANDLE_KEY(KEY_START_OF_WEEK, key_start_of_week); HANDLE_KEY(KEY_END_OF_WEEK, key_end_of_week); HANDLE_KEY(KEY_GENERIC_SCROLL_UP, key_generic_scroll_up); HANDLE_KEY(KEY_GENERIC_SCROLL_DOWN, key_generic_scroll_down); HANDLE_KEY(KEY_GENERIC_QUIT, key_generic_quit); HANDLE_KEY(KEY_GENERIC_CMD, key_generic_cmd); case KEY_RESIZE: case ERR: /* Do not reset the count parameter on resize or error. */ continue; default: break; } count = 0; } } calcurse-4.0.0/src/io.c0000644000175000017500000010500112472326722011603 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include #include #include #include #include #include "calcurse.h" #include "sha1.h" typedef enum { PROGRESS_BAR_SAVE, PROGRESS_BAR_LOAD, PROGRESS_BAR_EXPORT } progress_bar_t; enum { PROGRESS_BAR_CONF, PROGRESS_BAR_TODO, PROGRESS_BAR_APTS, PROGRESS_BAR_KEYS }; enum { PROGRESS_BAR_EXPORT_EVENTS, PROGRESS_BAR_EXPORT_APOINTS, PROGRESS_BAR_EXPORT_TODO }; struct ht_keybindings_s { const char *label; enum key key; HTABLE_ENTRY(ht_keybindings_s); }; static void load_keys_ht_getkey(struct ht_keybindings_s *, const char **, int *); static int load_keys_ht_compare(struct ht_keybindings_s *, struct ht_keybindings_s *); #define HSIZE 256 HTABLE_HEAD(ht_keybindings, HSIZE, ht_keybindings_s); HTABLE_PROTOTYPE(ht_keybindings, ht_keybindings_s) HTABLE_GENERATE(ht_keybindings, ht_keybindings_s, load_keys_ht_getkey, load_keys_ht_compare) static int modified = 0; /* Draw a progress bar while saving, loading or exporting data. */ static void progress_bar(progress_bar_t type, int progress) { #define NBFILES 4 #define NBEXPORTED 3 #define LABELENGTH 15 int i, step, steps; const char *mesg_sav = _("Saving..."); const char *mesg_load = _("Loading..."); const char *mesg_export = _("Exporting..."); const char *error_msg = _("Internal error while displaying progress bar"); const char *barchar = "|"; const char *file[NBFILES] = { "[ conf ]", "[ todo ]", "[ apts ]", "[ keys ]" }; const char *data[NBEXPORTED] = { "[ events ]", "[appointments]", "[ todo ]" }; int ipos = LABELENGTH + 2; int epos[NBFILES]; /* progress bar length init. */ ipos = LABELENGTH + 2; steps = (type == PROGRESS_BAR_EXPORT) ? NBEXPORTED : NBFILES; step = floor(col / (steps + 1)); for (i = 0; i < steps - 1; i++) epos[i] = (i + 2) * step; epos[steps - 1] = col - 2; switch (type) { case PROGRESS_BAR_SAVE: EXIT_IF(progress < 0 || progress > PROGRESS_BAR_KEYS, "%s", error_msg); status_mesg(mesg_sav, file[progress]); break; case PROGRESS_BAR_LOAD: EXIT_IF(progress < 0 || progress > PROGRESS_BAR_KEYS, "%s", error_msg); status_mesg(mesg_load, file[progress]); break; case PROGRESS_BAR_EXPORT: EXIT_IF(progress < 0 || progress > PROGRESS_BAR_EXPORT_TODO, "%s", error_msg); status_mesg(mesg_export, data[progress]); break; } /* Draw the progress bar. */ mvwaddstr(win[STA].p, 1, ipos, barchar); mvwaddstr(win[STA].p, 1, epos[steps - 1], barchar); custom_apply_attr(win[STA].p, ATTR_HIGHEST); for (i = ipos + 1; i < epos[progress]; i++) mvwaddch(win[STA].p, 1, i, ' ' | A_REVERSE); custom_remove_attr(win[STA].p, ATTR_HIGHEST); wmove(win[STA].p, 0, 0); wins_wrefresh(win[STA].p); #undef NBFILES #undef NBEXPORTED #undef LABELENGTH } /* Ask user for a file name to export data to. */ static FILE *get_export_stream(enum export_type type) { FILE *stream; char *home, *stream_name; const char *question = _("Choose the file used to export calcurse data:"); const char *wrong_name = _("The file cannot be accessed, please enter another file name."); const char *press_enter = _("Press [ENTER] to continue."); const char *file_ext[IO_EXPORT_NBTYPES] = { "ical", "txt" }; stream = NULL; if ((home = getenv("HOME")) != NULL) asprintf(&stream_name, "%s/calcurse.%s", home, file_ext[type]); else asprintf(&stream_name, "%s/calcurse.%s", get_tempdir(), file_ext[type]); while (stream == NULL) { status_mesg(question, ""); if (updatestring(win[STA].p, &stream_name, 0, 1)) { mem_free(stream_name); return NULL; } stream = fopen(stream_name, "w"); if (stream == NULL) { status_mesg(wrong_name, press_enter); wgetch(win[KEY].p); } } mem_free(stream_name); return stream; } /* Append a line to a file. */ unsigned io_fprintln(const char *fname, const char *fmt, ...) { FILE *fp; va_list ap; char *buf; int ret; fp = fopen(fname, "a"); RETVAL_IF(!fp, 0, _("Failed to open \"%s\", - %s\n"), fname, strerror(errno)); va_start(ap, fmt); ret = vasprintf(&buf, fmt, ap); RETVAL_IF(ret < 0, 0, _("Failed to build message\n")); va_end(ap); ret = fprintf(fp, "%s", buf); RETVAL_IF(ret < 0, 0, _("Failed to print message \"%s\"\n"), buf); ret = fclose(fp); RETVAL_IF(ret != 0, 0, _("Failed to close \"%s\" - %s\n"), fname, strerror(errno)); mem_free(buf); return 1; } /* * Initialization of data paths. The cfile argument is the variable * which contains the calendar file. If none is given, then the default * one (~/.calcurse/apts) is taken. If the one given does not exist, it * is created. * The datadir argument can be use to specify an alternative data root dir. */ void io_init(const char *cfile, const char *datadir) { const char *home; if (datadir != NULL) { home = datadir; snprintf(path_dir, BUFSIZ, "%s", home); snprintf(path_todo, BUFSIZ, "%s/" TODO_PATH_NAME, home); snprintf(path_conf, BUFSIZ, "%s/" CONF_PATH_NAME, home); snprintf(path_notes, BUFSIZ, "%s/" NOTES_DIR_NAME, home); snprintf(path_keys, BUFSIZ, "%s/" KEYS_PATH_NAME, home); snprintf(path_cpid, BUFSIZ, "%s/" CPID_PATH_NAME, home); snprintf(path_dpid, BUFSIZ, "%s/" DPID_PATH_NAME, home); snprintf(path_dmon_log, BUFSIZ, "%s/" DLOG_PATH_NAME, home); } else { home = getenv("HOME"); if (home == NULL) { home = "."; } snprintf(path_dir, BUFSIZ, "%s/" DIR_NAME, home); snprintf(path_todo, BUFSIZ, "%s/" TODO_PATH, home); snprintf(path_conf, BUFSIZ, "%s/" CONF_PATH, home); snprintf(path_keys, BUFSIZ, "%s/" KEYS_PATH, home); snprintf(path_cpid, BUFSIZ, "%s/" CPID_PATH, home); snprintf(path_dpid, BUFSIZ, "%s/" DPID_PATH, home); snprintf(path_dmon_log, BUFSIZ, "%s/" DLOG_PATH, home); snprintf(path_notes, BUFSIZ, "%s/" NOTES_DIR, home); } if (cfile == NULL) { if (datadir != NULL) { snprintf(path_apts, BUFSIZ, "%s/" APTS_PATH_NAME, home); } else { snprintf(path_apts, BUFSIZ, "%s/" APTS_PATH, home); } } else { snprintf(path_apts, BUFSIZ, "%s", cfile); EXIT_IF(!io_file_exists(path_apts), _("%s does not exist"), path_apts); } } void io_extract_data(char *dst_data, const char *org, int len) { int i; for (; *org == ' ' || *org == '\t'; org++) ; for (i = 0; i < len - 1; i++) { if (*org == '\n' || *org == '\0') break; *dst_data++ = *org++; } *dst_data = '\0'; } static pthread_mutex_t io_save_mutex = PTHREAD_MUTEX_INITIALIZER; void io_save_mutex_lock(void) { pthread_mutex_lock(&io_save_mutex); } void io_save_mutex_unlock(void) { pthread_mutex_unlock(&io_save_mutex); } /* * Save the apts data file, which contains the * appointments first, and then the events. * Recursive items are written first. */ unsigned io_save_apts(const char *aptsfile) { llist_item_t *i; FILE *fp; if (aptsfile) { if (read_only) return 1; if ((fp = fopen(aptsfile, "w")) == NULL) return 0; } else { fp = stdout; } recur_save_data(fp); if (ui_mode == UI_CURSES) LLIST_TS_LOCK(&alist_p); LLIST_TS_FOREACH(&alist_p, i) { struct apoint *apt = LLIST_TS_GET_DATA(i); apoint_write(apt, fp); } if (ui_mode == UI_CURSES) LLIST_TS_UNLOCK(&alist_p); LLIST_FOREACH(&eventlist, i) { struct event *ev = LLIST_TS_GET_DATA(i); event_write(ev, fp); } if (aptsfile) file_close(fp, __FILE_POS__); return 1; } /* Save the todo data file. */ unsigned io_save_todo(const char *todofile) { llist_item_t *i; FILE *fp; if (todofile) { if (read_only) return 1; if ((fp = fopen(todofile, "w")) == NULL) return 0; } else { fp = stdout; } LLIST_FOREACH(&todolist, i) { struct todo *todo = LLIST_TS_GET_DATA(i); todo_write(todo, fp); } if (todofile) file_close(fp, __FILE_POS__); return 1; } /* Save user-defined keys */ unsigned io_save_keys(void) { FILE *fp; if (read_only) return 1; if ((fp = fopen(path_keys, "w")) == NULL) return 0; keys_save_bindings(fp); file_close(fp, __FILE_POS__); return 1; } /* Save the calendar data */ void io_save_cal(enum save_display display) { const char *access_pb = _("Problems accessing data file ..."); const char *save_success = _("The data files were successfully saved"); const char *enter = _("Press [ENTER] to continue"); int show_bar; if (read_only) return; pthread_mutex_lock(&io_save_mutex); show_bar = 0; if (ui_mode == UI_CURSES && display == IO_SAVE_DISPLAY_BAR && conf.progress_bar) show_bar = 1; if (show_bar) progress_bar(PROGRESS_BAR_SAVE, PROGRESS_BAR_CONF); if (!config_save()) ERROR_MSG("%s", access_pb); if (show_bar) progress_bar(PROGRESS_BAR_SAVE, PROGRESS_BAR_TODO); if (!io_save_todo(path_todo)) ERROR_MSG("%s", access_pb); if (show_bar) progress_bar(PROGRESS_BAR_SAVE, PROGRESS_BAR_APTS); if (!io_save_apts(path_apts)) ERROR_MSG("%s", access_pb); if (show_bar) progress_bar(PROGRESS_BAR_SAVE, PROGRESS_BAR_KEYS); if (!io_save_keys()) ERROR_MSG("%s", access_pb); io_unset_modified(); /* Print a message telling data were saved */ if (ui_mode == UI_CURSES && display == IO_SAVE_DISPLAY_BAR && conf.system_dialogs) { status_mesg(save_success, enter); wgetch(win[KEY].p); } pthread_mutex_unlock(&io_save_mutex); } static void io_load_error(const char *filename, unsigned line, const char *mesg) { EXIT("%s:%u: %s", filename, line, mesg); } /* * Check what type of data is written in the appointment file, * and then load either: a new appointment, a new event, or a new * recursive item (which can also be either an event or an appointment). */ void io_load_app(struct item_filter *filter) { FILE *data_file; int c, is_appointment, is_event, is_recursive; struct tm start, end, until, lt; llist_t exc; time_t t; int id = 0; int freq; char type, state = 0L; char note[MAX_NOTESIZ + 1], *notep; unsigned line = 0; t = time(NULL); localtime_r(&t, <); start = end = until = lt; data_file = fopen(path_apts, "r"); EXIT_IF(data_file == NULL, _("failed to open appointment file")); for (;;) { LLIST_INIT(&exc); is_appointment = is_event = is_recursive = 0; line++; c = getc(data_file); if (c == EOF) break; ungetc(c, data_file); /* Read the date first: it is common to both events * and appointments. */ if (fscanf(data_file, "%d / %d / %d ", &start.tm_mon, &start.tm_mday, &start.tm_year) != 3) io_load_error(path_apts, line, _("syntax error in the item date")); /* Read the next character : if it is an '@' then we have * an appointment, else if it is an '[' we have en event. */ c = getc(data_file); if (c == '@') is_appointment = 1; else if (c == '[') is_event = 1; else io_load_error(path_apts, line, _("no event nor appointment found")); /* Read the remaining informations. */ if (is_appointment) { if (fscanf (data_file, " %d : %d -> %d / %d / %d @ %d : %d ", &start.tm_hour, &start.tm_min, &end.tm_mon, &end.tm_mday, &end.tm_year, &end.tm_hour, &end.tm_min) != 7) io_load_error(path_apts, line, _("syntax error in item time or duration")); } else if (is_event) { if (fscanf(data_file, " %d ", &id) != 1 || getc(data_file) != ']') io_load_error(path_apts, line, _("syntax error in item identifier")); while ((c = getc(data_file)) == ' ') ; ungetc(c, data_file); } else { io_load_error(path_apts, line, _("wrong format in the appointment or event")); /* NOTREACHED */ } /* Check if we have a recursive item. */ c = getc(data_file); if (c == '{') { is_recursive = 1; if (fscanf(data_file, " %d%c ", &freq, &type) != 2) io_load_error(path_apts, line, _("syntax error in item repetition")); c = getc(data_file); if (c == '}') { /* endless recurrent item */ until.tm_year = 0; while ((c = getc(data_file)) == ' ') ; ungetc(c, data_file); } else if (c == '-' && getc(data_file) == '>') { if (fscanf (data_file, " %d / %d / %d ", &until.tm_mon, &until.tm_mday, &until.tm_year) != 3) io_load_error(path_apts, line, _("syntax error in item repetition")); c = getc(data_file); if (c == '!') { ungetc(c, data_file); recur_exc_scan(&exc, data_file); while ((c = getc(data_file)) == ' ') ; ungetc(c, data_file); } else if (c == '}') { while ((c = getc(data_file)) == ' ') ; ungetc(c, data_file); } else { io_load_error(path_apts, line, _("syntax error in item repetition")); } } else if (c == '!') { /* endless item with exceptions */ ungetc(c, data_file); recur_exc_scan(&exc, data_file); while ((c = getc(data_file)) == ' ') ; ungetc(c, data_file); until.tm_year = 0; } else { io_load_error(path_apts, line, _("wrong format in the appointment or event")); /* NOTREACHED */ } } else { ungetc(c, data_file); } /* Check if a note is attached to the item. */ c = getc(data_file); if (c == '>') { note_read(note, data_file); notep = note; } else { notep = NULL; ungetc(c, data_file); } /* * Last: read the item description and load it into its * corresponding linked list, depending on the item type. */ if (is_appointment) { c = getc(data_file); if (c == '!') { state |= APOINT_NOTIFY; while ((c = getc(data_file)) == ' ') ; ungetc(c, data_file); } else if (c == '|') { state = 0L; while ((c = getc(data_file)) == ' ') ; ungetc(c, data_file); } else { io_load_error(path_apts, line, _("syntax error in item repetition")); } if (is_recursive) { recur_apoint_scan(data_file, start, end, type, freq, until, notep, &exc, state, filter); } else { apoint_scan(data_file, start, end, state, notep, filter); } } else if (is_event) { if (is_recursive) { recur_event_scan(data_file, start, id, type, freq, until, notep, &exc, filter); } else { event_scan(data_file, start, id, notep, filter); } } else { io_load_error(path_apts, line, _("wrong format in the appointment or event")); /* NOTREACHED */ } } file_close(data_file, __FILE_POS__); } /* Load the todo data */ void io_load_todo(struct item_filter *filter) { FILE *data_file; char *newline; int nb_tod = 0; int c, id; char buf[BUFSIZ], e_todo[BUFSIZ], note[MAX_NOTESIZ + 1]; unsigned line = 0; data_file = fopen(path_todo, "r"); EXIT_IF(data_file == NULL, _("failed to open todo file")); for (;;) { line++; c = getc(data_file); if (c == EOF) { break; } else if (c == '[') { /* new style with id */ if (fscanf(data_file, " %d ", &id) != 1 || getc(data_file) != ']') io_load_error(path_todo, line, _("syntax error in item identifier")); while ((c = getc(data_file)) == ' ') ; ungetc(c, data_file); } else { id = 9; ungetc(c, data_file); } /* Now read the attached note, if any. */ c = getc(data_file); if (c == '>') { note_read(note, data_file); } else { note[0] = '\0'; ungetc(c, data_file); } /* Then read todo description. */ if (!fgets(buf, sizeof buf, data_file)) buf[0] = '\0'; newline = strchr(buf, '\n'); if (newline) *newline = '\0'; io_extract_data(e_todo, buf, sizeof buf); /* Filter item. */ if (filter) { if (!(filter->type_mask & TYPE_MASK_TODO)) continue; if (filter->regex && regexec(filter->regex, e_todo, 0, 0, 0)) continue; if (filter->priority && id != filter->priority) continue; if (filter->completed && id > 0) continue; if (filter->uncompleted && id < 0) continue; } todo_add(e_todo, id, note); ++nb_tod; } file_close(data_file, __FILE_POS__); } /* Load appointments and todo items */ void io_load_data(struct item_filter *filter) { io_load_app(filter); io_load_todo(filter); } void io_reload_data(void) { char *msg_um_asktype = NULL; const char *reload_success = _("The data files were reloaded successfully"); const char *enter = _("Press [ENTER] to continue"); if (io_get_modified()) { const char *msg_um_prefix = _("There are unsaved modifications:"); const char *msg_um_discard = _("(d)iscard"); const char *msg_um_merge = _("(m)erge"); const char *msg_um_keep = _("(k)eep and cancel"); const char *msg_um_choice = _("[dmk]"); asprintf(&msg_um_asktype, "%s %s, %s, %s", msg_um_prefix, msg_um_discard, msg_um_merge, msg_um_keep); char *path_apts_backup, *path_todo_backup; const char *backup_ext = ".sav"; switch (status_ask_choice(msg_um_asktype, msg_um_choice, 3)) { case 1: break; case 2: asprintf(&path_apts_backup, "%s%s", path_apts, backup_ext); asprintf(&path_todo_backup, "%s%s", path_todo, backup_ext); io_save_mutex_lock(); io_save_apts(path_apts_backup); io_save_todo(path_todo_backup); io_save_mutex_unlock(); if (!io_files_equal(path_apts, path_apts_backup)) { const char *arg_apts[] = { conf.mergetool, path_apts, path_apts_backup, NULL }; wins_launch_external(arg_apts); } if (!io_files_equal(path_todo, path_todo_backup)) { const char *arg_todo[] = { conf.mergetool, path_todo, path_todo_backup, NULL }; wins_launch_external(arg_todo); } xfree(path_apts_backup); xfree(path_todo_backup); break; case 3: /* FALLTHROUGH */ default: wins_update(FLAG_STA); goto cleanup; } } if (notify_bar()) notify_stop_main_thread(); /* Reinitialize data structures. */ apoint_llist_free(); event_llist_free(); recur_apoint_llist_free(); recur_event_llist_free(); todo_free_list(); apoint_llist_init(); event_llist_init(); recur_apoint_llist_init(); recur_event_llist_init(); todo_init_list(); io_load_data(NULL); io_unset_modified(); ui_todo_load_items(); ui_todo_sel_reset(); if (conf.system_dialogs) { status_mesg(reload_success, enter); wgetch(win[KEY].p); } if (notify_bar()) notify_start_main_thread(); cleanup: mem_free(msg_um_asktype); } static void load_keys_ht_getkey(struct ht_keybindings_s *data, const char **key, int *len) { *key = data->label; *len = strlen(data->label); } static int load_keys_ht_compare(struct ht_keybindings_s *data1, struct ht_keybindings_s *data2) { const int KEYLEN = strlen(data1->label); if (strlen(data2->label) == KEYLEN && !memcmp(data1->label, data2->label, KEYLEN)) return 0; else return 1; } /* * isblank(3) is protected by the __BSD_VISIBLE macro and this fails to be * visible in some specific cases. Thus replace it by the following is_blank() * function. */ static int is_blank(int c) { return c == ' ' || c == '\t'; } /* * Load user-definable keys from file. * A hash table is used to speed up loading process in avoiding string * comparisons. * A log file is also built in case some errors were found in the key * configuration file. */ void io_load_keys(const char *pager) { struct ht_keybindings_s keys[NBKEYS]; FILE *keyfp; char buf[BUFSIZ]; struct io_file *log; int i, skipped, loaded, line; const int MAX_ERRORS = 5; keys_init(); struct ht_keybindings ht_keys = HTABLE_INITIALIZER(&ht_keys); for (i = 0; i < NBKEYS; i++) { keys[i].key = (enum key)i; keys[i].label = keys_get_label((enum key)i); HTABLE_INSERT(ht_keybindings, &ht_keys, &keys[i]); } keyfp = fopen(path_keys, "r"); EXIT_IF(keyfp == NULL, _("failed to open key file")); log = io_log_init(); skipped = loaded = line = 0; while (fgets(buf, BUFSIZ, keyfp) != NULL) { char key_label[BUFSIZ], *p; struct ht_keybindings_s *ht_elm, ht_entry; const int AWAITED = 1; int assigned; line++; if (skipped > MAX_ERRORS) { const char *too_many = _("\nToo many errors while reading configuration file!\n" "Please backup your keys file, remove it from directory, " "and launch calcurse again.\n"); io_log_print(log, line, too_many); break; } for (p = buf; is_blank((int)*p); p++) ; if (p != buf) memmove(buf, p, strlen(p)); if (buf[0] == '#' || buf[0] == '\n') continue; if (sscanf(buf, "%s", key_label) != AWAITED) { skipped++; io_log_print(log, line, _("Could not read key label")); continue; } /* Skip legacy entries. */ if (strcmp(key_label, "generic-cut") == 0) continue; ht_entry.label = key_label; p = buf + strlen(key_label) + 1; ht_elm = HTABLE_LOOKUP(ht_keybindings, &ht_keys, &ht_entry); if (!ht_elm) { skipped++; io_log_print(log, line, _("Key label not recognized")); continue; } assigned = 0; for (;;) { char key_ch[BUFSIZ], tmpbuf[BUFSIZ]; while (*p == ' ') p++; (void)strncpy(tmpbuf, p, BUFSIZ); if (sscanf(tmpbuf, "%s", key_ch) == AWAITED) { int ch; if ((ch = keys_str2int(key_ch)) < 0) { char *unknown_key; skipped++; asprintf(&unknown_key, _("Error reading key: \"%s\""), key_ch); io_log_print(log, line, unknown_key); mem_free(unknown_key); } else { int used; used = keys_assign_binding(ch, ht_elm-> key); if (used) { char *already_assigned; skipped++; asprintf(&already_assigned, _("\"%s\" assigned multiple times!"), key_ch); io_log_print(log, line, already_assigned); mem_free(already_assigned); } else { assigned++; } } p += strlen(key_ch) + 1; } else { if (assigned) loaded++; break; } } } file_close(keyfp, __FILE_POS__); file_close(log->fd, __FILE_POS__); if (skipped > 0) { const char *view_log = _("There were some errors when loading keys file, see log file?"); io_log_display(log, view_log, pager); } io_log_free(log); EXIT_IF(skipped > MAX_ERRORS, _("Too many errors while reading keys file, aborting...")); if (loaded < NBKEYS) keys_fill_missing(); if (keys_check_missing_bindings()) WARN_MSG(_("Some actions do not have any associated key bindings!")); } int io_check_dir(const char *dir) { if (read_only) return -1; errno = 0; if (mkdir(dir, 0700) != 0) { if (errno != EEXIST) { fprintf(stderr, _("FATAL ERROR: could not create %s: %s\n"), dir, strerror(errno)); exit_calcurse(EXIT_FAILURE); } else { return 1; } } else { return 0; } } unsigned io_dir_exists(const char *path) { struct stat st; return (!stat(path, &st) && S_ISDIR(st.st_mode)); } unsigned io_file_exists(const char *file) { FILE *fd; if (file && (fd = fopen(file, "r")) != NULL) { fclose(fd); return 1; } else { return 0; } } int io_check_file(const char *file) { if (read_only) return -1; errno = 0; if (io_file_exists(file)) { return 1; } else { FILE *fd; if ((fd = fopen(file, "w")) == NULL) { fprintf(stderr, _("FATAL ERROR: could not create %s: %s\n"), file, strerror(errno)); exit_calcurse(EXIT_FAILURE); } file_close(fd, __FILE_POS__); return 0; } } /* * Checks if data files exist. If not, create them. * The following structure has to be created: * * $HOME/.calcurse/ * | * +--- notes/ * |___ conf * |___ keys * |___ apts * |___ todo */ int io_check_data_files(void) { int missing = 0; missing += io_check_dir(path_dir) ? 0 : 1; missing += io_check_dir(path_notes) ? 0 : 1; missing += io_check_file(path_todo) ? 0 : 1; missing += io_check_file(path_apts) ? 0 : 1; missing += io_check_file(path_conf) ? 0 : 1; if (!io_check_file(path_keys)) { missing++; keys_dump_defaults(path_keys); } return missing; } /* Draw the startup screen */ void io_startup_screen(int no_data_file) { const char *enter = _("Press [ENTER] to continue"); if (no_data_file) status_mesg(_("Welcome to Calcurse. Missing data files were created."), enter); else status_mesg(_("Data files found. Data will be loaded now."), enter); wgetch(win[KEY].p); } /* Export calcurse data. */ void io_export_data(enum export_type type) { FILE *stream = NULL; const char *success = _("The data were successfully exported"); const char *enter = _("Press [ENTER] to continue"); if (type < IO_EXPORT_ICAL || type >= IO_EXPORT_NBTYPES) EXIT(_("unknown export type")); switch (ui_mode) { case UI_CMDLINE: stream = stdout; break; case UI_CURSES: stream = get_export_stream(type); break; default: EXIT(_("wrong export mode")); /* NOTREACHED */ } if (stream == NULL) return; if (type == IO_EXPORT_ICAL) ical_export_data(stream); else if (type == IO_EXPORT_PCAL) pcal_export_data(stream); if (conf.system_dialogs && ui_mode == UI_CURSES) { status_mesg(success, enter); wgetch(win[KEY].p); } } static FILE *get_import_stream(enum import_type type) { FILE *stream = NULL; char *stream_name; const char *ask_fname = _("Enter the file name to import data from:"); const char *wrong_file = _("The file cannot be accessed, please enter another file name."); const char *press_enter = _("Press [ENTER] to continue."); stream_name = mem_malloc(BUFSIZ); memset(stream_name, 0, BUFSIZ); while (stream == NULL) { status_mesg(ask_fname, ""); if (updatestring(win[STA].p, &stream_name, 0, 1)) { mem_free(stream_name); return NULL; } stream = fopen(stream_name, "r"); if (stream == NULL) { status_mesg(wrong_file, press_enter); wgetch(win[KEY].p); } } mem_free(stream_name); return stream; } /* * Import data from a given stream (either stdin in non-interactive mode, or the * user given file in interactive mode). * A temporary log file is created in /tmp to store the import process report, * and is cleared at the end. */ void io_import_data(enum import_type type, const char *stream_name) { const char *proc_report = _("Import process report: %04d lines read"); char *stats_str[4]; FILE *stream = NULL; struct io_file *log; struct { unsigned events, apoints, todos, lines, skipped; } stats; EXIT_IF(type < 0 || type >= IO_IMPORT_NBTYPES, _("unknown import type")); switch (ui_mode) { case UI_CMDLINE: stream = fopen(stream_name, "r"); EXIT_IF(stream == NULL, _("FATAL ERROR: the input file cannot be accessed, " "Aborting...")); break; case UI_CURSES: stream = get_import_stream(type); break; default: EXIT(_("FATAL ERROR: wrong import mode")); /* NOTREACHED */ } if (stream == NULL) return; memset(&stats, 0, sizeof stats); log = io_log_init(); if (log == NULL) { if (stream != stdin) file_close(stream, __FILE_POS__); return; } if (type == IO_IMPORT_ICAL) ical_import_data(stream, log->fd, &stats.events, &stats.apoints, &stats.todos, &stats.lines, &stats.skipped); if (stream != stdin) file_close(stream, __FILE_POS__); asprintf(&stats_str[0], ngettext("%d app", "%d apps", stats.apoints), stats.apoints); asprintf(&stats_str[1], ngettext("%d event", "%d events", stats.events), stats.events); asprintf(&stats_str[2], ngettext("%d todo", "%d todos", stats.todos), stats.todos); asprintf(&stats_str[3], _("%d skipped"), stats.skipped); if (ui_mode == UI_CURSES && conf.system_dialogs) { char *read, *stat; asprintf(&read, proc_report, stats.lines); asprintf(&stat, "%s / %s / %s / %s (%s)", stats_str[0], stats_str[1], stats_str[2], stats_str[3], _("Press [ENTER] to continue")); status_mesg(read, stat); mem_free(read); mem_free(stat); wgetch(win[KEY].p); } else if (ui_mode == UI_CMDLINE) { printf(proc_report, stats.lines); printf("\n%s / %s / %s / %s\n", stats_str[0], stats_str[1], stats_str[2], stats_str[3]); } /* User has the choice to look at the log file if some items could not be imported. */ file_close(log->fd, __FILE_POS__); if (stats.skipped > 0) { const char *view_log = _("Some items could not be imported, see log file?"); io_log_display(log, view_log, conf.pager); } mem_free(stats_str[0]); mem_free(stats_str[1]); mem_free(stats_str[2]); mem_free(stats_str[3]); io_log_free(log); } struct io_file *io_log_init(void) { char *logprefix, *logname; struct io_file *log = mem_malloc(sizeof(struct io_file)); if (!log) { ERROR_MSG(_("Warning: could not open temporary log file, Aborting...")); return NULL; } asprintf(&logprefix, "%s/calcurse_log", get_tempdir()); logname = new_tempfile(logprefix); if (!logname) { ERROR_MSG(_("Warning: could not create temporary log file, Aborting...")); goto error; } strncpy(log->name, logname, sizeof(log->name)); log->fd = fopen(log->name, "w"); if (log->fd == NULL) { ERROR_MSG(_("Warning: could not open temporary log file, Aborting...")); goto error; } goto cleanup; error: mem_free(log); log = NULL; cleanup: mem_free(logprefix); mem_free(logname); return log; } void io_log_print(struct io_file *log, int line, const char *msg) { if (log && log->fd) fprintf(log->fd, "line %d: %s\n", line, msg); } void io_log_display(struct io_file *log, const char *msg, const char *pager) { RETURN_IF(log == NULL, _("No log file to display!")); if (ui_mode == UI_CMDLINE) { printf("\n%s [y/n] ", msg); if (fgetc(stdin) != 'y') return; const char *arg[] = { pager, log->name, NULL }; int pid; if ((pid = fork_exec(NULL, NULL, pager, arg))) child_wait(NULL, NULL, pid); } else { if (status_ask_bool(msg) == 1) { const char *arg[] = { pager, log->name, NULL }; wins_launch_external(arg); } wins_erase_status_bar(); } } void io_log_free(struct io_file *log) { if (!log) return; EXIT_IF(unlink(log->name) != 0, _("Warning: could not erase temporary log file %s, Aborting..."), log->name); mem_free(log); } static pthread_t io_t_psave; /* Thread used to periodically save data. */ static void *io_psave_thread(void *arg) { int delay = conf.periodic_save; EXIT_IF(delay < 0, _("Invalid delay")); for (;;) { sleep(delay * MININSEC); io_save_cal(IO_SAVE_DISPLAY_NONE); } } /* Launch the thread which handles periodic saves. */ void io_start_psave_thread(void) { pthread_create(&io_t_psave, NULL, io_psave_thread, NULL); } /* Stop periodic data saves. */ void io_stop_psave_thread(void) { if (!io_t_psave) return; /* Lock the mutex to avoid cancelling the thread during saving. */ io_save_mutex_lock(); pthread_cancel(io_t_psave); pthread_join(io_t_psave, NULL); io_save_mutex_unlock(); } /* * This sets a lock file to prevent from having two different instances of * calcurse running. * * If the lock cannot be obtained, then warn the user and exit calcurse. Else, * create a .calcurse.pid file in the user defined directory, which will be * removed when calcurse exits. * * Note: When creating the lock file, the interactive mode is not initialized * yet. */ void io_set_lock(void) { FILE *lock = fopen(path_cpid, "r"); int pid; if (lock != NULL) { /* If there is a lock file, check whether the process exists. */ if (fscanf(lock, "%d", &pid) == 1) { fclose(lock); if (kill(pid, 0) != 0 && errno == ESRCH) lock = NULL; } else { fclose(lock); } } if (lock != NULL) { fprintf(stderr, _("\nWARNING: it seems that another calcurse instance is " "already running.\n" "If this is not the case, please remove the following " "lock file: \n\"%s\"\n" "and restart calcurse.\n"), path_cpid); exit(EXIT_FAILURE); } if (!io_dump_pid(path_cpid)) EXIT(_("FATAL ERROR: could not create %s: %s\n"), path_cpid, strerror(errno)); } /* * Create a new file and write the process pid inside (used to create a simple * lock for example). Overwrite already existing files. */ unsigned io_dump_pid(char *file) { pid_t pid; FILE *fp; if (!file) return 0; pid = getpid(); if (!(fp = fopen(file, "w")) || fprintf(fp, "%ld\n", (long)pid) < 0 || fclose(fp) != 0) return 0; return 1; } /* * Return the pid number contained in a file previously created with * io_dump_pid (). * If no file was found, return 0. */ unsigned io_get_pid(char *file) { FILE *fp; unsigned pid; if (!file) return 0; if ((fp = fopen(file, "r")) == NULL) return 0; if (fscanf(fp, "%u", &pid) != 1) return 0; fclose(fp); return pid; } /* * Check whether a file is empty. */ int io_file_is_empty(char *file) { FILE *fp; int ret = -1; if (file && (fp = fopen(file, "r"))) { ret = (fgetc(fp) == '\n' && fgetc(fp) == EOF) || feof(fp); fclose(fp); } return ret; } /* * Check whether two files are equal. */ int io_files_equal(const char *file1, const char *file2) { FILE *fp1, *fp2; int ret = 0; if (!file1 || !file2) return 0; fp1 = fopen(file1, "rb"); fp2 = fopen(file2, "rb"); while (!feof(fp1) && !feof(fp2)) { if (fgetc(fp1) != fgetc(fp2)) goto cleanup; } ret = 1; cleanup: fclose(fp1); fclose(fp2); return ret; } /* * Copy an existing file to a new location. */ int io_file_cp(const char *src, const char *dst) { FILE *fp_src, *fp_dst; char *buffer[BUFSIZ]; unsigned int bytes_read; if (!(fp_src = fopen(src, "rb"))) return 0; if (!(fp_dst = fopen(dst, "wb"))) return 0; while (!feof(fp_src)) { bytes_read = fread(buffer, 1, BUFSIZ, fp_src); if (bytes_read > 0) { if (fwrite(buffer, 1, bytes_read, fp_dst) != bytes_read) return 0; } else { return 0; } } fclose(fp_dst); fclose(fp_src); return 1; } void io_unset_modified(void) { modified = 0; } void io_set_modified(void) { modified = 1; } int io_get_modified(void) { return modified; } calcurse-4.0.0/src/Makefile.in0000644000175000017500000005112112472330410013065 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = calcurse$(EXEEXT) subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_calcurse_OBJECTS = calcurse.$(OBJEXT) apoint.$(OBJEXT) \ args.$(OBJEXT) config.$(OBJEXT) custom.$(OBJEXT) day.$(OBJEXT) \ event.$(OBJEXT) getstring.$(OBJEXT) help.$(OBJEXT) \ ical.$(OBJEXT) io.$(OBJEXT) keys.$(OBJEXT) listbox.$(OBJEXT) \ llist.$(OBJEXT) note.$(OBJEXT) notify.$(OBJEXT) pcal.$(OBJEXT) \ recur.$(OBJEXT) sha1.$(OBJEXT) sigs.$(OBJEXT) todo.$(OBJEXT) \ ui-calendar.$(OBJEXT) ui-day.$(OBJEXT) ui-todo.$(OBJEXT) \ utf8.$(OBJEXT) utils.$(OBJEXT) vars.$(OBJEXT) vector.$(OBJEXT) \ wins.$(OBJEXT) mem.$(OBJEXT) dmon.$(OBJEXT) calcurse_OBJECTS = $(am_calcurse_OBJECTS) calcurse_LDADD = $(LDADD) calcurse_DEPENDENCIES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(calcurse_SOURCES) DIST_SOURCES = $(calcurse_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = $(datadir)/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign AM_CPPFLAGS = -DDOCDIR=\"@docdir@\" AM_CFLAGS = -std=c99 -pedantic -D_POSIX_C_SOURCE=200809L calcurse_SOURCES = \ calcurse.c \ calcurse.h \ htable.h \ llist.h \ llist_ts.h \ sha1.h \ apoint.c \ args.c \ config.c \ custom.c \ day.c \ event.c \ getstring.c \ help.c \ ical.c \ io.c \ keys.c \ listbox.c \ llist.c \ note.c \ notify.c \ pcal.c \ recur.c \ sha1.c \ sigs.c \ todo.c \ ui-calendar.c \ ui-day.c \ ui-todo.c \ utf8.c \ utils.c \ vars.c \ vector.c \ vector.h \ wins.c \ mem.c \ dmon.c LDADD = @LTLIBINTL@ all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) calcurse$(EXEEXT): $(calcurse_OBJECTS) $(calcurse_DEPENDENCIES) $(EXTRA_calcurse_DEPENDENCIES) @rm -f calcurse$(EXEEXT) $(AM_V_CCLD)$(LINK) $(calcurse_OBJECTS) $(calcurse_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apoint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calcurse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/custom.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/day.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dmon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getstring.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ical.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keys.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listbox.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/llist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/note.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/notify.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recur.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/todo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-calendar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-day.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui-todo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vars.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wins.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: calcurse-4.0.0/src/getstring.c0000644000175000017500000001637112472326722013215 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include "calcurse.h" struct getstr_charinfo { unsigned int offset, dpyoff; }; struct getstr_status { char *s; struct getstr_charinfo *ci; int pos, len; int scrpos; }; /* Print the string at the desired position. */ static void getstr_print(WINDOW * win, int x, int y, struct getstr_status *st) { char c = 0; /* print string */ mvwaddnstr(win, y, x, &st->s[st->ci[st->scrpos].offset], -1); wclrtoeol(win); /* print scrolling indicator */ if (st->scrpos > 0 && st->ci[st->len].dpyoff - st->ci[st->scrpos].dpyoff > col - 2) c = '*'; else if (st->scrpos > 0) c = '<'; else if (st->ci[st->len].dpyoff - st->ci[st->scrpos].dpyoff > col - 2) c = '>'; mvwprintw(win, y, col - 2, " %c", c); /* print cursor */ wmove(win, y, st->ci[st->pos].dpyoff - st->ci[st->scrpos].dpyoff); wchgat(win, 1, A_REVERSE, COLR_CUSTOM, NULL); } /* Delete a character at the given position in string. */ static void getstr_del_char(struct getstr_status *st) { char *str = st->s + st->ci[st->pos].offset; int cl = st->ci[st->pos + 1].offset - st->ci[st->pos].offset; int cw = st->ci[st->pos + 1].dpyoff - st->ci[st->pos].dpyoff; int i; memmove(str, str + cl, strlen(str) + 1); st->len--; for (i = st->pos; i <= st->len; i++) { st->ci[i].offset = st->ci[i + 1].offset - cl; st->ci[i].dpyoff = st->ci[i + 1].dpyoff - cw; } } /* Add a character at the given position in string. */ static void getstr_ins_char(struct getstr_status *st, char *c) { char *str = st->s + st->ci[st->pos].offset; int cl = UTF8_LENGTH(c[0]); int cw = utf8_width(c); int i; memmove(str + cl, str, strlen(str) + 1); for (i = 0; i < cl; i++, str++) *str = c[i]; for (i = st->len; i >= st->pos; i--) { st->ci[i + 1].offset = st->ci[i].offset + cl; st->ci[i + 1].dpyoff = st->ci[i].dpyoff + cw; } st->len++; } static void bell(void) { putchar('\a'); } /* Initialize getstring data structure. */ static void getstr_init(struct getstr_status *st, char *str, struct getstr_charinfo *ci) { int width; st->s = str; st->ci = ci; st->len = width = 0; while (*str) { st->ci[st->len].offset = str - st->s; st->ci[st->len].dpyoff = width; st->len++; width += utf8_width(str); str += UTF8_LENGTH(*str); } st->ci[st->len].offset = str - st->s; st->ci[st->len].dpyoff = width; st->pos = st->len; st->scrpos = 0; } /* Scroll left/right if the cursor moves outside the window range. */ static void getstr_fixscr(struct getstr_status *st) { const int pgsize = col / 3; int pgskip; while (st->pos < st->scrpos) { pgskip = 0; while (pgskip < pgsize && st->scrpos > 0) { st->scrpos--; pgskip += st->ci[st->scrpos + 1].dpyoff - st->ci[st->scrpos].dpyoff; } } while (st->ci[st->pos].dpyoff - st->ci[st->scrpos].dpyoff > col - 2) { pgskip = 0; while (pgskip < pgsize && st->scrpos < st->len) { pgskip += st->ci[st->scrpos + 1].dpyoff - st->ci[st->scrpos].dpyoff; st->scrpos++; } } } /* * Getstring allows to get user input and to print it on a window, * even if noecho() is on. This function is also used to modify an existing * text (the variable string can be non-NULL). * We need to do the echoing manually because of the multi-threading * environment, otherwise the cursor would move from place to place without * control. */ enum getstr getstring(WINDOW * win, char *str, int l, int x, int y) { struct getstr_status st; struct getstr_charinfo ci[l + 1]; int ch, k; char c[UTF8_MAXLEN]; getstr_init(&st, str, ci); custom_apply_attr(win, ATTR_HIGHEST); for (;;) { getstr_fixscr(&st); getstr_print(win, x, y, &st); wins_doupdate(); if ((ch = wgetch(win)) == '\n') break; switch (ch) { case KEY_BACKSPACE: /* delete one character */ case 330: case 127: case CTRL('H'): if (st.pos > 0) { st.pos--; getstr_del_char(&st); } else { bell(); } break; case CTRL('D'): /* delete next character */ if (st.pos < st.len) getstr_del_char(&st); else bell(); break; case CTRL('W'): /* delete a word */ if (st.pos > 0) { while (st.pos && st.s[st.ci[st.pos - 1].offset] == ' ') { st.pos--; getstr_del_char(&st); } while (st.pos && st.s[st.ci[st.pos - 1].offset] != ' ') { st.pos--; getstr_del_char(&st); } } else { bell(); } break; case CTRL('K'): /* delete to end-of-line */ st.s[st.ci[st.pos].offset] = 0; st.len = st.pos; break; case CTRL('A'): /* go to begginning of string */ st.pos = 0; break; case CTRL('E'): /* go to end of string */ st.pos = st.len; break; case KEY_LEFT: /* move one char backward */ case CTRL('B'): if (st.pos > 0) st.pos--; break; case KEY_RIGHT: /* move one char forward */ case CTRL('F'): if (st.pos < st.len) st.pos++; break; case ESCAPE: /* cancel editing */ return GETSTRING_ESC; break; default: /* insert one character */ c[0] = ch; for (k = 1; k < MIN(UTF8_LENGTH(c[0]), UTF8_MAXLEN); k++) c[k] = (unsigned char)wgetch(win); if (st.ci[st.len].offset + k < l) { getstr_ins_char(&st, c); st.pos++; } } } custom_remove_attr(win, ATTR_HIGHEST); return st.len == 0 ? GETSTRING_RET : GETSTRING_VALID; } /* Update an already existing string. */ int updatestring(WINDOW * win, char **str, int x, int y) { int len = strlen(*str); char *buf; enum getstr ret; EXIT_IF(len + 1 > BUFSIZ, _("Internal error: line too long")); buf = mem_malloc(BUFSIZ); memcpy(buf, *str, len + 1); ret = getstring(win, buf, BUFSIZ, x, y); if (ret == GETSTRING_VALID) { len = strlen(buf); *str = mem_realloc(*str, len + 1, 1); EXIT_IF(*str == NULL, _("out of memory")); memcpy(*str, buf, len + 1); } mem_free(buf); return ret; } calcurse-4.0.0/src/ui-todo.c0000644000175000017500000001552112472326722012563 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include "calcurse.h" /* Request user to enter a new todo item. */ void ui_todo_add(void) { int ch = 0; const char *mesg = _("Enter the new TODO item:"); const char *mesg_id = _("Enter the TODO priority [1 (highest) - 9 (lowest)]:"); char todo_input[BUFSIZ] = ""; status_mesg(mesg, ""); if (getstring(win[STA].p, todo_input, BUFSIZ, 0, 1) == GETSTRING_VALID) { while ((ch < '1') || (ch > '9')) { status_mesg(mesg_id, ""); ch = wgetch(win[KEY].p); } todo_add(todo_input, ch - '0', NULL); ui_todo_load_items(); io_set_modified(); } } /* Delete an item from the TODO list. */ void ui_todo_delete(void) { const char *del_todo_str = _("Do you really want to delete this task?"); const char *erase_warning = _("This item has a note attached to it. " "Delete (t)odo or just its (n)ote?"); const char *erase_choice = _("[tn]"); const int nb_erase_choice = 2; int answer; if (!LLIST_FIRST(&todolist) || (conf.confirm_delete && (status_ask_bool(del_todo_str) != 1))) { wins_erase_status_bar(); return; } struct todo *item = todo_get_item(listbox_get_sel(&lb_todo)); if (item->note) answer = status_ask_choice(erase_warning, erase_choice, nb_erase_choice); else answer = 1; switch (answer) { case 1: todo_delete(item); ui_todo_load_items(); io_set_modified(); break; case 2: todo_delete_note(item); io_set_modified(); break; default: wins_erase_status_bar(); return; } } /* Edit the description of an already existing todo item. */ void ui_todo_edit(void) { if (!LLIST_FIRST(&todolist)) return; struct todo *item = todo_get_item(listbox_get_sel(&lb_todo)); const char *mesg = _("Enter the new TODO description:"); status_mesg(mesg, ""); updatestring(win[STA].p, &item->mesg, 0, 1); io_set_modified(); } /* Pipe a todo item to an external program. */ void ui_todo_pipe(void) { char cmd[BUFSIZ] = ""; char const *arg[] = { cmd, NULL }; int pout; int pid; FILE *fpout; if (!LLIST_FIRST(&todolist)) return; struct todo *item = todo_get_item(listbox_get_sel(&lb_todo)); status_mesg(_("Pipe item to external command:"), ""); if (getstring(win[STA].p, cmd, BUFSIZ, 0, 1) != GETSTRING_VALID) return; wins_prepare_external(); if ((pid = shell_exec(NULL, &pout, *arg, arg))) { fpout = fdopen(pout, "w"); todo_write(item, fpout); fclose(fpout); child_wait(NULL, &pout, pid); press_any_key(); } wins_unprepare_external(); } /* Display todo items in the corresponding panel. */ void ui_todo_draw(int n, WINDOW *win, int y, int hilt, void *cb_data) { llist_item_t *i = *((llist_item_t **)cb_data); struct todo *todo = LLIST_TS_GET_DATA(i); int mark[2]; int width = lb_todo.sw.w; char buf[width * UTF8_MAXLEN]; int j; mark[0] = todo->id > 0 ? '0' + todo->id : 'X'; mark[1] = todo->note ? '>' : '.'; hilt = hilt && (wins_slctd() == TOD); if (hilt) custom_apply_attr(win, ATTR_HIGHEST); if (utf8_strwidth(todo->mesg) < width) { mvwprintw(win, y, 0, "%c%c %s", mark[0], mark[1], todo->mesg); } else { for (j = 0; todo->mesg[j] && width > 0; j++) { if (!UTF8_ISCONT(todo->mesg[j])) width -= utf8_width(&todo->mesg[j]); buf[j] = todo->mesg[j]; } if (j) buf[j - 1] = 0; else buf[0] = 0; mvwprintw(win, y, 0, "%c%c %s...", mark[0], mark[1], buf); } if (hilt) custom_remove_attr(win, ATTR_HIGHEST); *((llist_item_t **)cb_data) = i->next; } enum listbox_row_type ui_todo_row_type(int i, void *cb_data) { return LISTBOX_ROW_TEXT; } int ui_todo_height(int n, void *cb_data) { return 1; } void ui_todo_load_items(void) { int n = 0; llist_item_t *i; /* TODO: Optimize this by keeping the list size in a variable. */ LLIST_FOREACH(&todolist, i) n++; listbox_load_items(&lb_todo, n); } void ui_todo_sel_reset(void) { listbox_sel_move(&lb_todo, 0); } void ui_todo_sel_move(int delta) { listbox_sel_move(&lb_todo, delta); } /* Updates the TODO panel. */ void ui_todo_update_panel(int which_pan) { /* * This is used and modified by display_todo_item() to avoid quadratic * running time. */ llist_item_t *p = LLIST_FIRST(&todolist); listbox_set_cb_data(&lb_todo, &p); listbox_display(&lb_todo); } /* Change an item priority by pressing '+' or '-' inside TODO panel. */ void ui_todo_chg_priority(int diff) { if (!LLIST_FIRST(&todolist)) return; struct todo *item = todo_get_item(listbox_get_sel(&lb_todo)); int id = item->id + diff; struct todo *item_new; if (id < 1) id = 1; else if (id > 9) id = 9; item_new = todo_add(item->mesg, id, item->note); todo_delete(item); io_set_modified(); listbox_set_sel(&lb_todo, todo_get_position(item_new)); } void ui_todo_popup_item(void) { if (!LLIST_FIRST(&todolist)) return; struct todo *item = todo_get_item(listbox_get_sel(&lb_todo)); item_in_popup(NULL, NULL, item->mesg, _("TODO:")); } void ui_todo_flag(void) { if (!LLIST_FIRST(&todolist)) return; struct todo *item = todo_get_item(listbox_get_sel(&lb_todo)); todo_flag(item); io_set_modified(); } void ui_todo_view_note(void) { if (!LLIST_FIRST(&todolist)) return; struct todo *item = todo_get_item(listbox_get_sel(&lb_todo)); todo_view_note(item, conf.pager); } void ui_todo_edit_note(void) { if (!LLIST_FIRST(&todolist)) return; struct todo *item = todo_get_item(listbox_get_sel(&lb_todo)); todo_edit_note(item, conf.editor); io_set_modified(); } calcurse-4.0.0/src/todo.c0000644000175000017500000001045012472326722012144 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include "calcurse.h" llist_t todolist; /* Returns a structure containing the selected item. */ struct todo *todo_get_item(int item_number) { return LLIST_GET_DATA(LLIST_NTH(&todolist, item_number)); } static int todo_cmp_id(struct todo *a, struct todo *b) { /* * As of version 2.6, todo items can have a negative id, which means they * were completed. To keep them sorted, we need to consider the absolute id * value. */ int abs_a = abs(a->id); int abs_b = abs(b->id); return abs_a < abs_b ? -1 : (abs_a == abs_b ? 0 : 1); } /* * Add an item in the todo linked list. */ struct todo *todo_add(char *mesg, int id, char *note) { struct todo *todo; todo = mem_malloc(sizeof(struct todo)); todo->mesg = mem_strdup(mesg); todo->id = id; todo->note = (note != NULL && note[0] != '\0') ? mem_strdup(note) : NULL; LLIST_ADD_SORTED(&todolist, todo, todo_cmp_id); return todo; } void todo_write(struct todo *todo, FILE * f) { if (todo->note) fprintf(f, "[%d]>%s %s\n", todo->id, todo->note, todo->mesg); else fprintf(f, "[%d] %s\n", todo->id, todo->mesg); } /* Delete a note previously attached to a todo item. */ void todo_delete_note(struct todo *todo) { if (!todo->note) EXIT(_("no note attached")); erase_note(&todo->note); } /* Delete an item from the todo linked list. */ void todo_delete(struct todo *todo) { llist_item_t *i = LLIST_FIND_FIRST(&todolist, todo, NULL); if (!i) EXIT(_("no such todo")); LLIST_REMOVE(&todolist, i); mem_free(todo->mesg); erase_note(&todo->note); mem_free(todo); } /* * Flag a todo item (for now on, only the 'completed' state is available). * Internally, a completed item keeps its priority, but it becomes negative. * This way, it is easy to retrive its original priority if the user decides * that in fact it was not completed. */ void todo_flag(struct todo *t) { t->id = -t->id; } /* * Returns the position into the linked list corresponding to the * given todo item. */ int todo_get_position(struct todo *needle) { llist_item_t *i; int n = 0; LLIST_FOREACH(&todolist, i) { if (LLIST_TS_GET_DATA(i) == needle) return n; n++; } EXIT(_("todo not found")); return -1; /* avoid compiler warnings */ } /* Attach a note to a todo */ void todo_edit_note(struct todo *i, const char *editor) { edit_note(&i->note, editor); } /* View a note previously attached to a todo */ void todo_view_note(struct todo *i, const char *pager) { view_note(i->note, pager); } void todo_free(struct todo *todo) { mem_free(todo->mesg); erase_note(&todo->note); mem_free(todo); } void todo_init_list(void) { LLIST_INIT(&todolist); } void todo_free_list(void) { LLIST_FREE_INNER(&todolist, todo_free); LLIST_FREE(&todolist); } calcurse-4.0.0/src/vector.c0000644000175000017500000000563712472326722012514 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include "calcurse.h" /* * Initialize a vector. */ void vector_init(vector_t *v, unsigned size) { v->count = 0; v->size = size; v->data = mem_malloc(size * sizeof(void *)); } /* * Free a vector, but not the contained data. */ void vector_free(vector_t *v) { v->count = 0; v->size = 0; free(v->data); v->data = NULL; } /* * Free the data contained in a vector. */ void vector_free_inner(vector_t *v, vector_fn_free_t fn_free) { unsigned i; for (i = 0; i < v->count; i++) { fn_free(v->data[i]); } } /* * Get the first item of a vector. */ void *vector_first(vector_t *v) { return v->data[0]; } /* * Get the nth item of a vector. */ void *vector_nth(vector_t *v, int n) { return v->data[n]; } /* * Get the number of items in a vector. */ unsigned vector_count(vector_t *v) { return v->count; } /* * Add an item at the end of a vector. */ void vector_add(vector_t *v, void *data) { if (v->count >= v->size) { v->size *= 2; v->data = realloc(v->data, v->size * sizeof(void *)); } v->data[v->count] = data; v->count++; } /* * Sort a vector. */ void vector_sort(vector_t *v, vector_fn_cmp_t fn_cmp) { qsort(v->data, v->count, sizeof(void *), fn_cmp); } /* * Remove an item from a vector. */ void vector_remove(vector_t *v, unsigned n) { unsigned i; v->count--; for (i = n; i < v->count; i++) v->data[i + 1] = v->data[i]; } calcurse-4.0.0/src/sha1.h0000644000175000017500000000416012472326722012041 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * * This code is based on Steve Reid's public domain SHA1 implementation. * * The original version is available at: * ftp://ftp.funet.fi/pub/crypt/hash/sha/sha1.c * */ #include #define SHA1_BLOCKLEN 64 #define SHA1_DIGESTLEN 20 typedef struct { uint32_t state[5]; uint32_t count[2]; uint8_t buffer[SHA1_BLOCKLEN]; } sha1_ctx_t; void sha1_init(sha1_ctx_t *); void sha1_update(sha1_ctx_t *, const uint8_t *, unsigned int); void sha1_final(sha1_ctx_t *, uint8_t *); void sha1_digest(const char *, char *); void sha1_stream(FILE *, char *); calcurse-4.0.0/src/Makefile.am0000644000175000017500000000127312365427601013071 00000000000000AUTOMAKE_OPTIONS = foreign bin_PROGRAMS = calcurse AM_CPPFLAGS = -DDOCDIR=\"@docdir@\" AM_CFLAGS = -std=c99 -pedantic -D_POSIX_C_SOURCE=200809L calcurse_SOURCES = \ calcurse.c \ calcurse.h \ htable.h \ llist.h \ llist_ts.h \ sha1.h \ apoint.c \ args.c \ config.c \ custom.c \ day.c \ event.c \ getstring.c \ help.c \ ical.c \ io.c \ keys.c \ listbox.c \ llist.c \ note.c \ notify.c \ pcal.c \ recur.c \ sha1.c \ sigs.c \ todo.c \ ui-calendar.c \ ui-day.c \ ui-todo.c \ utf8.c \ utils.c \ vars.c \ vector.c \ vector.h \ wins.c \ mem.c \ dmon.c LDADD = @LTLIBINTL@ datadir = @datadir@ localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ calcurse-4.0.0/src/notify.c0000644000175000017500000005072412472326722012517 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include "calcurse.h" #define NOTIFY_FIELD_LENGTH 25 struct notify_vars { WINDOW *win; char *apts_file; char time[NOTIFY_FIELD_LENGTH]; char date[NOTIFY_FIELD_LENGTH]; pthread_mutex_t mutex; }; static struct notify_vars notify; static struct notify_app notify_app; static pthread_attr_t detached_thread_attr; static pthread_t notify_t_main; /* * Return the number of seconds before next appointment * (0 if no upcoming appointment). */ int notify_time_left(void) { time_t ntimer; int left; ntimer = time(NULL); left = notify_app.time - ntimer; return left > 0 ? left : 0; } /* * Return 1 if the reminder was not sent already for the upcoming * appointment. */ unsigned notify_needs_reminder(void) { if (notify_app.got_app && (((notify_app.state & APOINT_NOTIFY) && !nbar.notify_all) || (!(notify_app.state & APOINT_NOTIFY) && nbar.notify_all)) && !(notify_app.state & APOINT_NOTIFIED)) return 1; return 0; } /* * This is used to update the notify_app structure. * Note: the mutex associated with this structure must be locked by the * caller! */ void notify_update_app(long start, char state, char *msg) { notify_free_app(); notify_app.got_app = 1; notify_app.time = start; notify_app.state = state; notify_app.txt = mem_strdup(msg); } /* Return 1 if we need to display the notify-bar, else 0. */ int notify_bar(void) { int display_bar = 0; pthread_mutex_lock(&nbar.mutex); display_bar = (nbar.show) ? 1 : 0; pthread_mutex_unlock(&nbar.mutex); return display_bar; } /* Initialize the nbar variable used to store notification options. */ void notify_init_vars(void) { const char *time_format = "%T"; const char *date_format = "%a %F"; const char *cmd = "printf '\\a'"; pthread_mutex_init(&nbar.mutex, NULL); nbar.show = 1; nbar.cntdwn = 300; strncpy(nbar.datefmt, date_format, strlen(date_format) + 1); strncpy(nbar.timefmt, time_format, strlen(time_format) + 1); strncpy(nbar.cmd, cmd, strlen(cmd) + 1); if ((nbar.shell = getenv("SHELL")) == NULL) nbar.shell = "/bin/sh"; nbar.notify_all = 0; pthread_attr_init(&detached_thread_attr); pthread_attr_setdetachstate(&detached_thread_attr, PTHREAD_CREATE_DETACHED); } /* Extract the appointment file name from the complete file path. */ static void extract_aptsfile(void) { char *file; file = strrchr(path_apts, '/'); if (!file) { notify.apts_file = path_apts; } else { notify.apts_file = file; notify.apts_file++; } } /* * Create the notification bar, by initializing all the variables and * creating the notification window (l is the number of lines, c the * number of columns, y and x are its coordinates). */ void notify_init_bar(void) { pthread_mutex_init(¬ify.mutex, NULL); pthread_mutex_init(¬ify_app.mutex, NULL); notify_app.got_app = 0; notify_app.txt = 0; notify.win = newwin(win[NOT].h, win[NOT].w, win[NOT].y, win[NOT].x); extract_aptsfile(); } /* * Free memory associated with the notify_app structure. */ void notify_free_app(void) { notify_app.time = 0; notify_app.got_app = 0; notify_app.state = APOINT_NULL; if (notify_app.txt) mem_free(notify_app.txt); notify_app.txt = 0; } /* Stop the notify-bar main thread. */ void notify_stop_main_thread(void) { if (notify_t_main) { pthread_cancel(notify_t_main); pthread_join(notify_t_main, NULL); } } /* * The calcurse window geometry has changed so we need to reset the * notification window. */ void notify_reinit_bar(void) { delwin(notify.win); notify.win = newwin(win[NOT].h, win[NOT].w, win[NOT].y, win[NOT].x); } /* Launch user defined command as a notification. */ unsigned notify_launch_cmd(void) { int pid; if (notify_app.state & APOINT_NOTIFIED) return 1; notify_app.state |= APOINT_NOTIFIED; pid = fork(); if (pid < 0) { ERROR_MSG(_("error while launching command: could not fork")); return 0; } else if (pid == 0) { /* Child: launch user defined command */ if (execlp(nbar.shell, nbar.shell, "-c", nbar.cmd, NULL) < 0) { ERROR_MSG(_("error while launching command")); _exit(1); } _exit(0); } return 1; } /* * Update the notification bar. This is useful when changing color theme * for example. */ void notify_update_bar(void) { const int space = 3; int file_pos, date_pos, app_pos, txt_max_len, too_long = 0; int time_left, blinking; char buf[BUFSIZ]; date_pos = space; pthread_mutex_lock(¬ify.mutex); file_pos = strlen(notify.date) + strlen(notify.time) + 7 + 2 * space; app_pos = file_pos + strlen(notify.apts_file) + 2 + space; txt_max_len = col - (app_pos + 12 + space); WINS_NBAR_LOCK; custom_apply_attr(notify.win, ATTR_HIGHEST); wattron(notify.win, A_UNDERLINE | A_REVERSE); mvwhline(notify.win, 0, 0, ACS_HLINE, col); mvwprintw(notify.win, 0, date_pos, "[ %s | %s ]", notify.date, notify.time); mvwprintw(notify.win, 0, file_pos, "(%s)", notify.apts_file); WINS_NBAR_UNLOCK; pthread_mutex_lock(¬ify_app.mutex); if (notify_app.got_app) { if (strlen(notify_app.txt) > txt_max_len) { int shrink_len; too_long = 1; shrink_len = txt_max_len > 3 ? txt_max_len - 3 : 1; strncpy(buf, notify_app.txt, shrink_len); buf[shrink_len] = '\0'; } time_left = notify_time_left(); if (time_left > 0) { int hours_left, minutes_left; hours_left = (time_left / HOURINSEC); minutes_left = (time_left - hours_left * HOURINSEC) / MININSEC; pthread_mutex_lock(&nbar.mutex); if (time_left < nbar.cntdwn && (((notify_app.state & APOINT_NOTIFY) && !nbar.notify_all) || (!(notify_app.state & APOINT_NOTIFY) && nbar.notify_all))) blinking = 1; else blinking = 0; WINS_NBAR_LOCK; if (blinking) wattron(notify.win, A_BLINK); if (too_long) mvwprintw(notify.win, 0, app_pos, "> %02d:%02d :: %s.. <", hours_left, minutes_left, buf); else mvwprintw(notify.win, 0, app_pos, "> %02d:%02d :: %s <", hours_left, minutes_left, notify_app.txt); if (blinking) wattroff(notify.win, A_BLINK); WINS_NBAR_UNLOCK; if (blinking) notify_launch_cmd(); pthread_mutex_unlock(&nbar.mutex); } else { notify_app.got_app = 0; pthread_mutex_unlock(¬ify_app.mutex); pthread_mutex_unlock(¬ify.mutex); notify_check_next_app(0); return; } } pthread_mutex_unlock(¬ify_app.mutex); WINS_NBAR_LOCK; wattroff(notify.win, A_UNDERLINE | A_REVERSE); custom_remove_attr(notify.win, ATTR_HIGHEST); WINS_NBAR_UNLOCK; wins_wrefresh(notify.win); pthread_mutex_unlock(¬ify.mutex); } static void notify_main_thread_cleanup(void *arg) { pthread_mutex_trylock(¬ify.mutex); pthread_mutex_unlock(¬ify.mutex); pthread_mutex_trylock(&nbar.mutex); pthread_mutex_unlock(&nbar.mutex); } /* Update the notication bar content */ /* ARGSUSED0 */ static void *notify_main_thread(void *arg) { const unsigned thread_sleep = 1; const unsigned check_app = MININSEC; int elapse = 0; int got_app; struct tm ntime; time_t ntimer; elapse = 0; pthread_cleanup_push(notify_main_thread_cleanup, NULL); for (;;) { ntimer = time(NULL); localtime_r(&ntimer, &ntime); pthread_mutex_lock(¬ify.mutex); pthread_mutex_lock(&nbar.mutex); strftime(notify.time, NOTIFY_FIELD_LENGTH, nbar.timefmt, &ntime); strftime(notify.date, NOTIFY_FIELD_LENGTH, nbar.datefmt, &ntime); pthread_mutex_unlock(&nbar.mutex); pthread_mutex_unlock(¬ify.mutex); notify_update_bar(); psleep(thread_sleep); elapse += thread_sleep; if (elapse >= check_app) { elapse = 0; pthread_mutex_lock(¬ify_app.mutex); got_app = notify_app.got_app; pthread_mutex_unlock(¬ify_app.mutex); if (!got_app) notify_check_next_app(0); } } pthread_cleanup_pop(0); pthread_exit(NULL); } /* Fill the given structure with information about next appointment. */ unsigned notify_get_next(struct notify_app *a) { time_t current_time; if (!a) return 0; current_time = time(NULL); a->time = current_time + DAYINSEC; a->got_app = 0; a->state = 0; a->txt = NULL; recur_apoint_check_next(a, current_time, get_today()); apoint_check_next(a, current_time); return 1; } /* * This is used for the daemon to check if we have an upcoming appointment or * not. */ unsigned notify_get_next_bkgd(void) { struct notify_app a; a.txt = NULL; if (!notify_get_next(&a)) return 0; if (!a.got_app) { /* No next appointment, reset the previous notified one. */ notify_app.got_app = 0; return 1; } else { if (!notify_same_item(a.time)) notify_update_app(a.time, a.state, a.txt); } if (a.txt) mem_free(a.txt); return 1; } /* Return the description of next appointment to be notified. */ char *notify_app_txt(void) { if (notify_app.got_app) return notify_app.txt; else return NULL; } /* Look for the next appointment within the next 24 hours. */ /* ARGSUSED0 */ static void *notify_thread_app(void *arg) { struct notify_app tmp_app; int force = (arg ? 1 : 0); if (!notify_get_next(&tmp_app)) pthread_exit(NULL); if (!tmp_app.got_app) { pthread_mutex_lock(¬ify_app.mutex); notify_free_app(); pthread_mutex_unlock(¬ify_app.mutex); } else { if (force || !notify_same_item(tmp_app.time)) { pthread_mutex_lock(¬ify_app.mutex); notify_update_app(tmp_app.time, tmp_app.state, tmp_app.txt); pthread_mutex_unlock(¬ify_app.mutex); } } if (tmp_app.txt) mem_free(tmp_app.txt); notify_update_bar(); pthread_exit(NULL); } /* Launch the thread notify_thread_app to look for next appointment. */ void notify_check_next_app(int force) { pthread_t notify_t_app; void *arg = (force ? (void *)1 : NULL); pthread_create(¬ify_t_app, &detached_thread_attr, notify_thread_app, arg); return; } /* Check if the newly created appointment is to be notified. */ void notify_check_added(char *mesg, long start, char state) { time_t current_time; int update_notify = 0; long gap; current_time = time(NULL); pthread_mutex_lock(¬ify_app.mutex); if (!notify_app.got_app) { gap = start - current_time; if (gap >= 0 && gap <= DAYINSEC) update_notify = 1; } else if (start < notify_app.time && start >= current_time) { update_notify = 1; } else if (start == notify_app.time && state != notify_app.state) { update_notify = 1; } if (update_notify) { notify_update_app(start, state, mesg); } pthread_mutex_unlock(¬ify_app.mutex); notify_update_bar(); } /* Check if the newly repeated appointment is to be notified. */ void notify_check_repeated(struct recur_apoint *i) { unsigned real_app_time; int update_notify = 0; time_t current_time; current_time = time(NULL); pthread_mutex_lock(¬ify_app.mutex); if (recur_item_find_occurrence (i->start, i->dur, &i->exc, i->rpt->type, i->rpt->freq, i->rpt->until, get_today(), &real_app_time)) { if (!notify_app.got_app) { if (real_app_time - current_time <= DAYINSEC) update_notify = 1; } else if (real_app_time < notify_app.time && real_app_time >= current_time) { update_notify = 1; } else if (real_app_time == notify_app.time && i->state != notify_app.state) { update_notify = 1; } } if (update_notify) { notify_update_app(real_app_time, i->state, i->mesg); } pthread_mutex_unlock(¬ify_app.mutex); notify_update_bar(); } int notify_same_item(long time) { int same = 0; pthread_mutex_lock(&(notify_app.mutex)); if (notify_app.got_app && notify_app.time == time) same = 1; pthread_mutex_unlock(&(notify_app.mutex)); return same; } int notify_same_recur_item(struct recur_apoint *i) { int same = 0; unsigned item_start = 0; recur_item_find_occurrence(i->start, i->dur, &i->exc, i->rpt->type, i->rpt->freq, i->rpt->until, get_today(), &item_start); pthread_mutex_lock(¬ify_app.mutex); if (notify_app.got_app && item_start == notify_app.time) same = 1; pthread_mutex_unlock(&(notify_app.mutex)); return same; } /* Launch the notify-bar main thread. */ void notify_start_main_thread(void) { pthread_create(¬ify_t_main, NULL, notify_main_thread, NULL); notify_check_next_app(0); } /* * Print an option in the configuration menu. * Specific treatment is needed depending on if the option is of type boolean * (either YES or NO), or an option holding a string value. */ static void print_option(WINDOW * win, unsigned x, unsigned y, char *name, char *valstr, unsigned valbool, char *desc) { const int MAXCOL = col - 3; int x_opt, len; x_opt = x + strlen(name); mvwprintw(win, y, x, "%s", name); erase_window_part(win, x_opt, y, MAXCOL, y); if ((len = strlen(valstr)) != 0) { unsigned maxlen; maxlen = MAXCOL - x_opt - 2; custom_apply_attr(win, ATTR_HIGHEST); if (len < maxlen) { mvwaddstr(win, y, x_opt, valstr); } else { char buf[BUFSIZ]; strncpy(buf, valstr, maxlen - 1); buf[maxlen - 1] = '\0'; mvwprintw(win, y, x_opt, "%s...", buf); } custom_remove_attr(win, ATTR_HIGHEST); } else { print_bool_option_incolor(win, valbool, y, x_opt); } mvwaddstr(win, y + 1, x, desc); } /* Print options related to the notify-bar. */ static void print_config_option(int i, WINDOW *win, int y, int hilt, void *cb_data) { enum { SHOW, DATE, CLOCK, WARN, CMD, NOTIFY_ALL, DMON, DMON_LOG, NB_OPT }; struct opt_s { char *name; char *desc; char valstr[BUFSIZ]; unsigned valnum; } opt[NB_OPT]; opt[SHOW].name = "appearance.notifybar = "; opt[SHOW].desc = _("(if set to YES, notify-bar will be displayed)"); opt[DATE].name = "format.notifydate = "; opt[DATE].desc = _("(Format of the date to be displayed inside notify-bar)"); opt[CLOCK].name = "format.notifytime = "; opt[CLOCK].desc = _("(Format of the time to be displayed inside notify-bar)"); opt[WARN].name = "notification.warning = "; opt[WARN].desc = _("(Warn user if an appointment is within next " "'notify-bar_warning' seconds)"); opt[CMD].name = "notification.command = "; opt[CMD].desc = _("(Command used to notify user of an upcoming appointment)"); opt[NOTIFY_ALL].name = "notification.notifyall = "; opt[NOTIFY_ALL].desc = _("(Notify all appointments instead of flagged ones only)"); opt[DMON].name = "daemon.enable = "; opt[DMON].desc = _("(Run in background to get notifications after exiting)"); opt[DMON_LOG].name = "daemon.log = "; opt[DMON_LOG].desc = _("(Log activity when running in background)"); pthread_mutex_lock(&nbar.mutex); /* String value options */ strncpy(opt[DATE].valstr, nbar.datefmt, BUFSIZ); strncpy(opt[CLOCK].valstr, nbar.timefmt, BUFSIZ); snprintf(opt[WARN].valstr, BUFSIZ, "%d", nbar.cntdwn); strncpy(opt[CMD].valstr, nbar.cmd, BUFSIZ); /* Boolean options */ opt[SHOW].valnum = nbar.show; opt[NOTIFY_ALL].valnum = nbar.notify_all; pthread_mutex_unlock(&nbar.mutex); opt[DMON].valnum = dmon.enable; opt[DMON_LOG].valnum = dmon.log; opt[SHOW].valstr[0] = opt[NOTIFY_ALL].valstr[0] = opt[DMON].valstr[0] = opt[DMON_LOG].valstr[0] = '\0'; if (hilt) custom_apply_attr(win, ATTR_HIGHEST); print_option(win, 1, y, opt[i].name, opt[i].valstr, opt[i].valnum, opt[i].desc); if (hilt) custom_remove_attr(win, ATTR_HIGHEST); } static enum listbox_row_type config_option_row_type(int i, void *cb_data) { return LISTBOX_ROW_TEXT; } static int config_option_height(int i, void *cb_data) { return 3; } static void config_option_edit(int i) { char *buf; const char *date_str = _("Enter the date format (see 'man 3 strftime' for possible formats) "); const char *time_str = _("Enter the time format (see 'man 3 strftime' for possible formats) "); const char *count_str = _("Enter the number of seconds (0 not to be warned before an appointment)"); const char *cmd_str = _("Enter the notification command "); buf = mem_malloc(BUFSIZ); buf[0] = '\0'; switch (i) { case 0: pthread_mutex_lock(&nbar.mutex); nbar.show = !nbar.show; pthread_mutex_unlock(&nbar.mutex); if (notify_bar()) notify_start_main_thread(); else notify_stop_main_thread(); resize = 1; break; case 1: status_mesg(date_str, ""); pthread_mutex_lock(&nbar.mutex); strncpy(buf, nbar.datefmt, strlen(nbar.datefmt) + 1); pthread_mutex_unlock(&nbar.mutex); if (updatestring(win[STA].p, &buf, 0, 1) == 0) { pthread_mutex_lock(&nbar.mutex); strncpy(nbar.datefmt, buf, strlen(buf) + 1); pthread_mutex_unlock(&nbar.mutex); } break; case 2: status_mesg(time_str, ""); pthread_mutex_lock(&nbar.mutex); strncpy(buf, nbar.timefmt, strlen(nbar.timefmt) + 1); pthread_mutex_unlock(&nbar.mutex); if (updatestring(win[STA].p, &buf, 0, 1) == 0) { pthread_mutex_lock(&nbar.mutex); strncpy(nbar.timefmt, buf, strlen(buf) + 1); pthread_mutex_unlock(&nbar.mutex); } break; case 3: status_mesg(count_str, ""); pthread_mutex_lock(&nbar.mutex); snprintf(buf, BUFSIZ, "%d", nbar.cntdwn); pthread_mutex_unlock(&nbar.mutex); if (updatestring(win[STA].p, &buf, 0, 1) == 0 && is_all_digit(buf) && atoi(buf) >= 0 && atoi(buf) <= DAYINSEC) { pthread_mutex_lock(&nbar.mutex); nbar.cntdwn = atoi(buf); pthread_mutex_unlock(&nbar.mutex); } break; case 4: status_mesg(cmd_str, ""); pthread_mutex_lock(&nbar.mutex); strncpy(buf, nbar.cmd, strlen(nbar.cmd) + 1); pthread_mutex_unlock(&nbar.mutex); if (updatestring(win[STA].p, &buf, 0, 1) == 0) { pthread_mutex_lock(&nbar.mutex); strncpy(nbar.cmd, buf, strlen(buf) + 1); pthread_mutex_unlock(&nbar.mutex); } break; case 5: pthread_mutex_lock(&nbar.mutex); nbar.notify_all = !nbar.notify_all; pthread_mutex_unlock(&nbar.mutex); notify_check_next_app(1); break; case 6: dmon.enable = !dmon.enable; break; case 7: dmon.log = !dmon.log; break; } mem_free(buf); } /* Notify-bar configuration. */ void notify_config_bar(void) { static int bindings[] = { KEY_GENERIC_QUIT, KEY_MOVE_UP, KEY_MOVE_DOWN, KEY_EDIT_ITEM }; struct listbox lb; int ch; clear(); listbox_init(&lb, 0, 0, notify_bar() ? row - 3 : row - 2, col, _("notification options"), config_option_row_type, config_option_height, print_config_option); listbox_load_items(&lb, 8); listbox_draw_deco(&lb, 0); listbox_display(&lb); wins_set_bindings(bindings, ARRAY_SIZE(bindings)); wins_status_bar(); wnoutrefresh(win[STA].p); wmove(win[STA].p, 0, 0); wins_doupdate(); while ((ch = keys_getch(win[KEY].p, NULL, NULL)) != KEY_GENERIC_QUIT) { switch (ch) { case KEY_MOVE_DOWN: listbox_sel_move(&lb, 1); break; case KEY_MOVE_UP: listbox_sel_move(&lb, -1); break; case KEY_EDIT_ITEM: config_option_edit(listbox_get_sel(&lb)); break; } if (resize) { resize = 0; wins_get_config(); wins_reset_noupdate(); listbox_resize(&lb, 0, 0, notify_bar() ? row - 3 : row - 2, col); listbox_draw_deco(&lb, 0); delwin(win[STA].p); win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x); keypad(win[STA].p, TRUE); if (notify_bar()) { notify_reinit_bar(); notify_update_bar(); } clearok(curscr, TRUE); } listbox_display(&lb); wins_status_bar(); wnoutrefresh(win[STA].p); wmove(win[STA].p, 0, 0); wins_doupdate(); } listbox_delete(&lb); } calcurse-4.0.0/src/htable.h0000644000175000017500000006267012472326722012456 00000000000000/* * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef HTABLE_H #define HTABLE_H #include #include /* * This file defines data structures for hash tables. * * Hash tables are ideal for applications with datasets needing lots of adding, * searching or removal, as those are normally constant-time operations. * The primary operation it supports efficiently is a lookup: given a key (e.g. * a person's name), find the corresponding value (e.g. that person's telephone * number). It works by transforming the key using a hash function into a hash, * a number that is used as an index in an array to locate the desired location * ("bucket") where the values should be. * * Hash tables support the efficient insertion of new entries, in expected O(1) * time. The time spent in searching depends on the hash function and the load * of the hash table; both insertion and search approach O(1) time with well * chosen values and hashes. * * The collision resolution technique used here is direct chaining, implemented * using singly linked lists (the worst-case time is O(n)). * * This was chosen because performance degradation is linear as the table * fills, so there is almost no need to resize table * (for example, a chaining hash table containing twice its recommended * capacity of data would only be about twice as slow on average as the same * table at its recommended capacity). */ #define HTABLE_HEAD(name, size, type) \ struct name { \ uint32_t noitems; /* Number of items stored in hash table. */ \ uint32_t nosingle; /* Number of items alone in their bucket. */ \ uint32_t nofreebkts; /* Number of free buckets. */ \ struct type *bkts[size]; /* Pointers to user-defined data structures. */ \ } #define HTABLE_ENTRY(type) \ struct type *next /* To build the bucket chain list. */ #define HTABLE_SIZE(head) \ (sizeof (*(head)->bkts) ? sizeof ((head)->bkts) / sizeof (*(head)->bkts) : 0) #define HTABLE_COUNT(head) \ ((head)->noitems ? (head)->noitems : 0) #define HTABLE_EMPTY(head) \ (HTABLE_COUNT((head)) == 0 ? 1 : 0) #define HTABLE_COLLS(head) \ ((head)->noitems ? 100.0 - 100 * (head)->nosingle / (head)->noitems : 0) #define HTABLE_LOAD(head) \ (HTABLE_SIZE((head)) ? \ 100.0 - 100.0 * (head)->nofreebkts / HTABLE_SIZE((head)) : 0) #define HTABLE_INITIALIZER(head) \ { 0, /* noitems */ \ 0, /* nosingle */ \ HTABLE_SIZE((head)) /* nofreebkts */ \ } #define HTABLE_INIT(head) do { \ bzero ((head), sizeof (*(head))); \ (head)->nofreebkts = HTABLE_SIZE((head)); \ } while (0) /* * Generate prototypes. */ #define HTABLE_PROTOTYPE(name, type) \ struct type *name##_HTABLE_INSERT(struct name *, struct type *); \ struct type *name##_HTABLE_REMOVE(struct name *, struct type *); \ struct type *name##_HTABLE_LOOKUP(struct name *, struct type *); \ uint32_t name##_HTABLE_FIND_BKT(struct name *, struct type *); \ int name##_HTABLE_CHAIN_LEN(struct name *, uint32_t); \ struct type *name##_HTABLE_FIRST_FROM(struct name *, int); \ struct type *name##_HTABLE_NEXT(struct name *, struct type *); /* * Generate function bodies. */ #define HTABLE_GENERATE(name, type, key, cmp) \ uint32_t \ name##_HTABLE_FIND_BKT(struct name *head, struct type *elm) \ { \ uint32_t __bkt; \ const char *__key; \ int __len; \ \ (key) (elm, &__key, &__len); \ HTABLE_HASH(__key, __len, HTABLE_SIZE(head), __bkt); \ \ return __bkt; \ } \ \ int \ name##_HTABLE_CHAIN_LEN(struct name *head, uint32_t bkt) \ { \ struct type *__bktp; \ int __len; \ \ __len = 0; \ for (__bktp = (head)->bkts[(bkt)]; __bktp != NULL; __bktp = __bktp->next) \ __len++; \ \ return __len; \ } \ \ struct type * \ name##_HTABLE_INSERT(struct name *head, struct type *elm) \ { \ struct type *__bktp, **__bktpp; \ uint32_t __bkt, __pos; \ \ __pos = 0; \ __bkt = name##_HTABLE_FIND_BKT(head, elm); \ __bktpp = &head->bkts[__bkt]; \ while ((__bktp = *__bktpp)) \ { \ if (!(cmp)(elm, __bktp)) \ return NULL; \ else \ { \ __pos++; \ __bktpp = &__bktp->next; \ } \ } \ __bktp = elm; \ __bktp->next = NULL; \ *__bktpp = __bktp; \ head->noitems++; \ switch (__pos) \ { \ case 0: \ head->nosingle++; \ head->nofreebkts--; \ break; \ case 1: \ head->nosingle--; \ break; \ default: \ break; \ } \ \ return __bktp; \ } \ \ struct type * \ name##_HTABLE_REMOVE(struct name *head, struct type *elm) \ { \ struct type *__bktp, **__bktpp; \ uint32_t __bkt, __pos; \ \ __pos = 0; \ __bkt = name##_HTABLE_FIND_BKT(head, elm); \ __bktpp = &head->bkts[__bkt]; \ while ((__bktp = *__bktpp)) \ { \ if (!(cmp)(elm, __bktp)) \ { \ *__bktpp = __bktp->next; \ elm = __bktp; \ head->noitems--; \ if (__pos <= 1) /* Need to scan list to know if we have */ \ { /* a free bucket or a single item. */ \ int __len; \ \ __len = name##_HTABLE_CHAIN_LEN(head, __bkt); \ switch (__len) \ { \ case 0: \ head->nofreebkts++; \ head->nosingle--; \ break; \ case 1: \ head->nosingle++; \ break; \ } \ } \ return elm; \ } \ __pos++; \ __bktpp = &__bktp->next; \ } \ return NULL; \ } \ \ struct type * \ name##_HTABLE_LOOKUP(struct name *head, struct type *elm) \ { \ struct type *__bktp, **__bktpp; \ uint32_t __bkt; \ \ __bkt = name##_HTABLE_FIND_BKT(head, elm); \ __bktpp = &head->bkts[__bkt]; \ while ((__bktp = *__bktpp)) \ { \ if (!(cmp)(elm, __bktp)) \ return __bktp; \ else \ __bktpp = &__bktp->next; \ } \ \ return NULL; \ } \ \ struct type * \ name##_HTABLE_FIRST_FROM(struct name *head, int bkt) \ { \ struct type *__bktp; \ \ while (bkt < HTABLE_SIZE(head)) \ { \ if ((__bktp = head->bkts[bkt])) \ return __bktp; \ else \ bkt++; \ } \ \ return NULL; \ } \ \ struct type * \ name##_HTABLE_NEXT(struct name *head, struct type *elm) \ { \ struct type *__elmp, *__bktp, **__bktpp; \ uint32_t __bkt; \ \ __elmp = NULL; \ __bkt = name##_HTABLE_FIND_BKT(head, elm); \ __bktpp = &head->bkts[__bkt]; \ while ((__bktp = *__bktpp)) \ { \ if (!(cmp)(elm, __bktp)) \ { \ __elmp = __bktp; \ break; \ } \ else \ __bktpp = &__bktp->next; \ } \ \ if (!__elmp) \ return NULL; \ else if (__elmp->next) \ return __elmp->next; \ else \ return name##_HTABLE_FIRST_FROM(head, ++__bkt); \ } #define FIRST_BKT 0 #define HTABLE_INSERT(name, x, y) name##_HTABLE_INSERT(x, y) #define HTABLE_REMOVE(name, x, y) name##_HTABLE_REMOVE(x, y) #define HTABLE_LOOKUP(name, x, y) name##_HTABLE_LOOKUP(x, y) #define HTABLE_FIRST_FROM(name, x, y) (HTABLE_EMPTY(x) ? NULL \ : name##_HTABLE_FIRST_FROM(x, y)) #define HTABLE_FIRST(name, x) HTABLE_FIRST_FROM(name, x, FIRST_BKT) #define HTABLE_NEXT(name, x, y) (HTABLE_EMPTY(x) ? NULL \ : name##_HTABLE_NEXT(x, y)) #define HTABLE_FOREACH(x, name, head) \ for ((x) = HTABLE_FIRST(name, head); \ (x) != NULL; \ (x) = HTABLE_NEXT(name, head, x)) /* * Hash functions. */ #ifdef HASH_FUNCTION #define HTABLE_HASH HASH_FUNCTION #else #define HTABLE_HASH HASH_JEN #endif #define HASH_JEN_MIX(a, b, c) do { \ a -= b; a -= c; a ^= (c >> 13); \ b -= c; b -= a; b ^= (a << 8); \ c -= a; c -= b; c ^= (b >> 13); \ a -= b; a -= c; a ^= (c >> 12); \ b -= c; b -= a; b ^= (a << 16); \ c -= a; c -= b; c ^= (b >> 5); \ a -= b; a -= c; a ^= (c >> 3); \ b -= c; b -= a; b ^= (a << 10); \ c -= a; c -= b; c ^= (b >> 15); \ } while (0) #define HASH_JEN(key, keylen, num_bkts, bkt) do { \ register uint32_t i, j, k, hash; \ \ hash = 0xfeedbeef; \ i = j = 0x9e3779b9; \ k = keylen; \ while (k >= 12) \ { \ i += (key[0] + ((unsigned)key[1] << 8) \ + ((unsigned)key[2] << 16) \ + ((unsigned)key[3] << 24)); \ j += (key[4] + ((unsigned)key[5] << 8) \ + ((unsigned)key[6] << 16) \ + ((unsigned)key[7] << 24 )); \ hash += (key[8] + ((unsigned)key[9] << 8) \ + ((unsigned)key[10] << 16) \ + ((unsigned)key[11] << 24)); \ \ HASH_JEN_MIX (i, j, hash); \ \ key += 12; \ k -= 12; \ } \ hash += keylen; \ switch (k) \ { \ case 11: \ hash += ((unsigned)key[10] << 24); \ case 10: \ hash += ((unsigned)key[9] << 16); \ case 9: \ hash += ((unsigned)key[8] << 8); \ case 8: \ j += ((unsigned)key[7] << 24); \ case 7: \ j += ((unsigned)key[6] << 16); \ case 6: \ j += ((unsigned)key[5] << 8); \ case 5: \ j += key[4]; \ case 4: \ i += ((unsigned)key[3] << 24); \ case 3: \ i += ((unsigned)key[2] << 16); \ case 2: \ i += ((unsigned)key[1] << 8); \ case 1: \ i += key[0]; \ } \ HASH_JEN_MIX (i, j, hash); \ bkt = hash % (num_bkts); \ } while (0) #define HASH_OAT(key, keylen, num_bkts, bkt) do { \ register uint32_t hash; \ int i; \ \ hash = 0; \ for (i = 0; i < keylen; i++) \ { \ hash += key[i]; \ hash += (hash << 10); \ hash ^= (hash >> 6); \ } \ hash += (hash << 3); \ hash ^= (hash >> 11); \ hash += (hash << 15); \ bkt = hash % (num_bkts); \ } while (0) #endif /* !HTABLE_H */ calcurse-4.0.0/src/calcurse.h0000644000175000017500000010575412472326722013021 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #ifndef CALCURSE_H #define CALCURSE_H #include "config.h" #ifdef HAVE_NCURSES_H #include #elif defined HAVE_NCURSES_NCURSES_H #include #elif defined HAVE_NCURSESW_NCURSES_H #include #else #error "Missing ncurses header. Aborting..." #endif #include #include #include #include #include #include "llist.h" #include "vector.h" #include "htable.h" #include "llist_ts.h" /* Internationalization. */ #if ENABLE_NLS #include #include #undef _ #define _(String) gettext(String) #ifdef gettext_noop #define N_(String) gettext_noop(String) #else #define N_(String) (String) #endif #else /* NLS disabled */ #define _(String) (String) #define N_(String) (String) #define textdomain(String) (String) #define gettext(String) (String) #define dgettext(String) (String) #define dcgettext(String) (String) #define ngettext(String1,String2,n) ((n) == 1 ? (String1) : (String2)) #define bindtextdomain(String) (String) #define bind_textdomain_codeset(Domain,Codeset) (Codeset) #endif /* ENABLE_NLS */ /* Paths configuration. */ #define DIR_NAME ".calcurse/" #define TODO_PATH_NAME "todo" #define APTS_PATH_NAME "apts" #define CONF_PATH_NAME "conf" #define KEYS_PATH_NAME "keys" #define CPID_PATH_NAME ".calcurse.pid" #define DPID_PATH_NAME ".daemon.pid" #define DLOG_PATH_NAME "daemon.log" #define NOTES_DIR_NAME "notes/" #define TODO_PATH DIR_NAME TODO_PATH_NAME #define APTS_PATH DIR_NAME APTS_PATH_NAME #define CONF_PATH DIR_NAME CONF_PATH_NAME #define KEYS_PATH DIR_NAME KEYS_PATH_NAME #define CPID_PATH DIR_NAME CPID_PATH_NAME #define DLOG_PATH DIR_NAME DLOG_PATH_NAME #define DPID_PATH DIR_NAME DPID_PATH_NAME #define NOTES_DIR DIR_NAME NOTES_DIR_NAME #define DEFAULT_EDITOR "vi" #define DEFAULT_PAGER "less" #define DEFAULT_MERGETOOL "vimdiff" #define ATTR_FALSE 0 #define ATTR_TRUE 1 #define ATTR_LOWEST 2 #define ATTR_LOW 3 #define ATTR_MIDDLE 4 #define ATTR_HIGH 5 #define ATTR_HIGHEST 6 #define STATUSHEIGHT 2 #define MAX_NOTESIZ 40 /* Format for appointment hours is: HH:MM */ #define HRMIN_SIZE 6 /* Maximum number of colors available. */ #define NBUSERCOLORS 6 /* Side bar width acceptable boundaries. */ #define SBARMINWIDTH 32 #define SBARMAXWIDTHPERC 50 /* Related to date manipulation. */ #define YEARINMONTHS 12 #define YEARINDAYS 365 #define TM_YEAR_BASE 1900 #define WEEKINDAYS 7 #define DAYINHOURS 24 #define HOURINMIN 60 #define MININSEC 60 #define WEEKINHOURS (WEEKINDAYS * DAYINHOURS) #define WEEKINMIN (WEEKINHOURS * HOURINMIN) #define WEEKINSEC (WEEKINMIN * MININSEC) #define DAYINMIN (DAYINHOURS * HOURINMIN) #define DAYINSEC (DAYINMIN * MININSEC) #define HOURINSEC (HOURINMIN * MININSEC) #define MAXDAYSPERMONTH 31 /* Calendar window. */ #define CALHEIGHT 8 /* Key definitions. */ #define CTRLVAL 0x1F #define CTRL(x) ((x) & CTRLVAL) #define ESCAPE 27 #define TAB 9 #define SPACE 32 #define KEYS_KEYLEN 3 /* length of each keybinding */ #define KEYS_LABELEN 8 /* length of command description */ #define KEYS_CMDS_PER_LINE 6 /* max number of commands per line */ /* Register definitions. */ #define REG_BLACK_HOLE 37 /* Size of the hash table the note garbage collector uses. */ #define NOTE_GC_HSIZE 1024 #define ERROR_MSG(...) do { \ char msg[BUFSIZ]; \ int len; \ \ len = snprintf (msg, BUFSIZ, "%s: %d: ", __FILE__, __LINE__); \ snprintf (msg + len, BUFSIZ - len, __VA_ARGS__); \ if (ui_mode == UI_CURSES) \ fatalbox (msg); \ else \ fprintf (stderr, "%s\n", msg); \ } while (0) #define WARN_MSG(...) do { \ char msg[BUFSIZ]; \ \ snprintf (msg, BUFSIZ, __VA_ARGS__); \ if (ui_mode == UI_CURSES) \ warnbox (msg); \ else \ fprintf (stderr, "%s\n", msg); \ } while (0) #define EXIT(...) do { \ ERROR_MSG(__VA_ARGS__); \ if (ui_mode == UI_CURSES) \ exit_calcurse (EXIT_FAILURE); \ else \ exit (EXIT_FAILURE); \ } while (0) #define EXIT_IF(cond, ...) do { \ if ((cond)) \ EXIT(__VA_ARGS__); \ } while (0) #define RETURN_IF(cond, ...) do { \ if ((cond)) \ { \ ERROR_MSG(__VA_ARGS__); \ return; \ } \ } while (0) #define RETVAL_IF(cond, val, ...) do { \ if ((cond)) \ { \ ERROR_MSG(__VA_ARGS__); \ return (val); \ } \ } while (0) #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) #define __FILE_POS__ __FILE__ ":" TOSTRING(__LINE__) #define UTF8_MAXLEN 6 #define UTF8_LENGTH(ch) ((unsigned char)ch >= 0xFC ? 6 : \ ((unsigned char)ch >= 0xF8 ? 5 : \ ((unsigned char)ch >= 0xF0 ? 4 : \ ((unsigned char)ch >= 0xE0 ? 3 : \ ((unsigned char)ch >= 0xC0 ? 2 : 1))))) #define UTF8_ISCONT(ch) ((unsigned char)ch >= 0x80 && \ (unsigned char)ch <= 0xBF) #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #define MAX(x,y) ((x)>(y)?(x):(y)) #define MIN(x,y) ((x)<(y)?(x):(y)) enum win { CAL, APP, TOD, NOT, STA, KEY, NBWINS }; /* General configuration variables. */ struct conf { unsigned auto_save; unsigned auto_gc; unsigned periodic_save; unsigned confirm_quit; unsigned confirm_delete; enum win default_panel; unsigned compact_panels; unsigned system_dialogs; unsigned progress_bar; const char *editor; const char *pager; const char *mergetool; char output_datefmt[BUFSIZ]; /* format for displaying date */ int input_datefmt; /* format for reading date */ }; /* Daemon-related configuration. */ struct dmon_conf { unsigned enable; /* launch daemon automatically when exiting */ unsigned log; /* log daemon activity */ }; /* Input date formats. */ enum datefmt { DATEFMT_MMDDYYYY = 1, DATEFMT_DDMMYYYY, DATEFMT_YYYYMMDD, DATEFMT_ISO, DATEFMT_MAX }; #define DATE_FORMATS (DATEFMT_MAX - 1) #define DATEFMT(datefmt) (datefmt == DATEFMT_MMDDYYYY ? "%m/%d/%Y" : \ (datefmt == DATEFMT_DDMMYYYY ? "%d/%m/%Y" : \ (datefmt == DATEFMT_YYYYMMDD ? "%Y/%m/%d" : "%Y-%m-%d"))) #define DATEFMT_DESC(datefmt) (datefmt == DATEFMT_MMDDYYYY ? \ _("mm/dd/yyyy") : (datefmt == DATEFMT_DDMMYYYY ? _("dd/mm/yyyy") : \ (datefmt == DATEFMT_YYYYMMDD ? _("yyyy/mm/dd") : _("yyyy-mm-dd")))) struct date { unsigned dd; unsigned mm; unsigned yyyy; }; /* Appointment definition. */ struct apoint { long start; /* seconds since 1 jan 1970 */ long dur; /* duration of the appointment in seconds */ #define APOINT_NULL 0x0 #define APOINT_NOTIFY 0x1 /* Item needs to be notified */ #define APOINT_NOTIFIED 0x2 /* Item was already notified */ int state; char *mesg; char *note; }; /* Event definition. */ struct event { int id; /* event identifier */ long day; /* seconds since 1 jan 1970 */ char *mesg; char *note; }; /* Todo item definition. */ struct todo { char *mesg; int id; char *note; }; struct excp { long st; /* beggining of the considered day, in seconds */ }; enum recur_type { RECUR_NO, RECUR_DAILY, RECUR_WEEKLY, RECUR_MONTHLY, RECUR_YEARLY, RECUR_TYPES }; /* To describe an item's repetition. */ struct rpt { enum recur_type type; /* repetition type */ int freq; /* repetition frequence */ long until; /* ending date for repeated event */ }; /* Recurrent appointment definition. */ struct recur_apoint { struct rpt *rpt; /* information about repetition */ llist_t exc; /* days when the item should not be repeated */ long start; /* beggining of the appointment */ long dur; /* duration of the appointment */ char state; /* 8 bits to store item state */ char *mesg; /* appointment description */ char *note; /* note attached to appointment */ }; /* Reccurent event definition. */ struct recur_event { struct rpt *rpt; /* information about repetition */ llist_t exc; /* days when the item should not be repeated */ int id; /* event type */ long day; /* day at which event occurs */ char *mesg; /* event description */ char *note; /* note attached to event */ }; /* Generic pointer data type for appointments and events. */ union aptev_ptr { struct apoint *apt; struct event *ev; struct recur_apoint *rapt; struct recur_event *rev; }; /* Available item types in the calendar view. */ enum day_item_type { DAY_HEADING = 1, RECUR_EVNT, EVNT, DAY_SEPARATOR, RECUR_APPT, APPT }; /* Available item types. */ enum item_type { TYPE_EVNT, TYPE_APPT, TYPE_RECUR_EVNT, TYPE_RECUR_APPT, TYPE_TODO }; /* Available item type masks. */ #define TYPE_MASK_EVNT (1 << TYPE_EVNT) #define TYPE_MASK_APPT (1 << TYPE_APPT) #define TYPE_MASK_RECUR_EVNT (1 << TYPE_RECUR_EVNT) #define TYPE_MASK_RECUR_APPT (1 << TYPE_RECUR_APPT) #define TYPE_MASK_RECUR (TYPE_MASK_RECUR_EVNT | TYPE_MASK_RECUR_APPT) #define TYPE_MASK_CAL (TYPE_MASK_EVNT | TYPE_MASK_APPT | TYPE_MASK_RECUR) #define TYPE_MASK_TODO (1 << TYPE_TODO) #define TYPE_MASK_ALL (TYPE_MASK_CAL | TYPE_MASK_TODO) /* Filter settings. */ struct item_filter { int type_mask; regex_t *regex; long start_from; long start_to; long end_from; long end_to; int priority; int completed; int uncompleted; }; /* Generic item description (to hold appointments, events...). */ struct day_item { enum day_item_type type; long start; union aptev_ptr item; }; /* Available view for the calendar panel. */ enum { CAL_MONTH_VIEW, CAL_WEEK_VIEW, CAL_VIEWS }; struct notify_app { long time; int got_app; char *txt; char state; pthread_mutex_t mutex; }; struct io_file { FILE *fd; char name[BUFSIZ]; }; /* Available keys. */ enum key { KEY_GENERIC_CANCEL, KEY_GENERIC_SELECT, KEY_GENERIC_CREDITS, KEY_GENERIC_HELP, KEY_GENERIC_QUIT, KEY_GENERIC_SAVE, KEY_GENERIC_RELOAD, KEY_GENERIC_COPY, KEY_GENERIC_PASTE, KEY_GENERIC_CHANGE_VIEW, KEY_GENERIC_IMPORT, KEY_GENERIC_EXPORT, KEY_GENERIC_GOTO, KEY_GENERIC_OTHER_CMD, KEY_GENERIC_CONFIG_MENU, KEY_GENERIC_REDRAW, KEY_GENERIC_ADD_APPT, KEY_GENERIC_ADD_TODO, KEY_GENERIC_PREV_DAY, KEY_GENERIC_NEXT_DAY, KEY_GENERIC_PREV_WEEK, KEY_GENERIC_NEXT_WEEK, KEY_GENERIC_PREV_MONTH, KEY_GENERIC_NEXT_MONTH, KEY_GENERIC_PREV_YEAR, KEY_GENERIC_NEXT_YEAR, KEY_GENERIC_SCROLL_DOWN, KEY_GENERIC_SCROLL_UP, KEY_GENERIC_GOTO_TODAY, KEY_GENERIC_CMD, KEY_MOVE_RIGHT, KEY_MOVE_LEFT, KEY_MOVE_DOWN, KEY_MOVE_UP, KEY_START_OF_WEEK, KEY_END_OF_WEEK, KEY_ADD_ITEM, KEY_DEL_ITEM, KEY_EDIT_ITEM, KEY_VIEW_ITEM, KEY_PIPE_ITEM, KEY_FLAG_ITEM, KEY_REPEAT_ITEM, KEY_EDIT_NOTE, KEY_VIEW_NOTE, KEY_RAISE_PRIORITY, KEY_LOWER_PRIORITY, NBKEYS, KEY_UNDEF, /* Non-configurable, context sensitive key bindings. */ KEY_CONFIGMENU_GENERAL, KEY_CONFIGMENU_LAYOUT, KEY_CONFIGMENU_SIDEBAR, KEY_CONFIGMENU_COLOR, KEY_CONFIGMENU_NOTIFY, KEY_CONFIGMENU_KEYS }; #define FLAG_CAL (1 << CAL) #define FLAG_APP (1 << APP) #define FLAG_TOD (1 << TOD) #define FLAG_NOT (1 << NOT) #define FLAG_STA (1 << STA) #define FLAG_ALL ((1 << NBWINS) - 1) #define WINS_NBAR_LOCK \ pthread_cleanup_push(wins_nbar_cleanup, NULL); \ wins_nbar_lock(); #define WINS_NBAR_UNLOCK \ wins_nbar_unlock(); \ pthread_cleanup_pop(0); #define WINS_CALENDAR_LOCK \ pthread_cleanup_push(wins_calendar_cleanup, NULL); \ wins_calendar_lock(); #define WINS_CALENDAR_UNLOCK \ wins_calendar_unlock(); \ pthread_cleanup_pop(0); enum ui_mode { UI_CURSES, UI_CMDLINE, UI_MODES }; /* Generic window structure. */ struct window { WINDOW *p; /* pointer to window */ unsigned w; /* width */ unsigned h; /* height */ int x; /* x position */ int y; /* y position */ }; /* Generic scrolling window structure. */ struct scrollwin { WINDOW *win; WINDOW *inner; int y; int x; int h; int w; unsigned line_off; unsigned line_num; const char *label; }; /* Generic list box structure. */ enum listbox_row_type { LISTBOX_ROW_TEXT, LISTBOX_ROW_CAPTION }; typedef enum listbox_row_type (*listbox_fn_item_type_t) (int, void *); typedef int (*listbox_fn_item_height_t) (int, void *); typedef void (*listbox_fn_draw_item_t) (int, WINDOW *, int, int, void *); struct listbox { struct scrollwin sw; unsigned item_count; int item_sel; listbox_fn_item_type_t fn_type; enum listbox_row_type *type; listbox_fn_item_height_t fn_height; unsigned *ch; listbox_fn_draw_item_t fn_draw; void *cb_data; }; /* Pad structure to handle scrolling. */ struct pad { int width; int length; int first_onscreen; /* first line to be displayed inside window */ WINDOW *ptrwin; /* pointer to the pad window */ }; /* Notification bar definition. */ struct nbar { unsigned show; /* display or hide the notify-bar */ int cntdwn; /* warn when time left before next app becomes lesser than cntdwn */ char datefmt[BUFSIZ]; /* format for displaying date */ char timefmt[BUFSIZ]; /* format for displaying time */ char cmd[BUFSIZ]; /* notification command */ const char *shell; /* user shell to launch notif. cmd */ unsigned notify_all; /* notify all appointments */ pthread_mutex_t mutex; }; /* Return codes for the getstring() function. */ enum getstr { GETSTRING_VALID, GETSTRING_ESC, /* user pressed escape to cancel editing. */ GETSTRING_RET /* return was pressed without entering any text. */ }; /* Week days. */ enum wday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, WDAYS }; /* Possible movements inside calendar. */ enum move { DAY_PREV, DAY_NEXT, WEEK_PREV, WEEK_NEXT, WEEK_START, WEEK_END, MONTH_PREV, MONTH_NEXT, YEAR_PREV, YEAR_NEXT }; /* Available color pairs. */ enum { COLR_RED = 1, COLR_GREEN, COLR_YELLOW, COLR_BLUE, COLR_MAGENTA, COLR_CYAN, COLR_DEFAULT, COLR_HIGH, COLR_CUSTOM }; /* Available import types. */ enum import_type { IO_IMPORT_ICAL, IO_IMPORT_NBTYPES }; /* Available export types. */ enum export_type { IO_EXPORT_ICAL, IO_EXPORT_PCAL, IO_EXPORT_NBTYPES }; /* To customize the display when saving data. */ enum save_display { IO_SAVE_DISPLAY_BAR, IO_SAVE_DISPLAY_NONE }; /* apoint.c */ extern llist_ts_t alist_p; void apoint_free_bkp(void); struct apoint *apoint_dup(struct apoint *); void apoint_free(struct apoint *); void apoint_llist_init(void); void apoint_llist_free(void); struct apoint *apoint_new(char *, char *, long, long, char); unsigned apoint_inday(struct apoint *, long *); void apoint_sec2str(struct apoint *, long, char *, char *); void apoint_write(struct apoint *, FILE *); struct apoint *apoint_scan(FILE *, struct tm, struct tm, char, char *, struct item_filter *); void apoint_delete(struct apoint *); struct notify_app *apoint_check_next(struct notify_app *, long); void apoint_switch_notify(struct apoint *); void apoint_paste_item(struct apoint *, long); /* args.c */ int parse_args(int, char **); /* calendar.c */ void ui_calendar_view_next(void); void ui_calendar_view_prev(void); void ui_calendar_set_view(int); int ui_calendar_get_view(void); void ui_calendar_start_date_thread(void); void ui_calendar_stop_date_thread(void); void ui_calendar_set_current_date(void); void ui_calendar_set_first_day_of_week(enum wday); void ui_calendar_change_first_day_of_week(void); unsigned ui_calendar_week_begins_on_monday(void); void ui_calendar_store_current_date(struct date *); void ui_calendar_init_slctd_day(void); struct date *ui_calendar_get_slctd_day(void); long ui_calendar_get_slctd_day_sec(void); void ui_calendar_monthly_view_cache_set_invalid(void); void ui_calendar_update_panel(void); void ui_calendar_goto_today(void); void ui_calendar_change_day(int); void ui_calendar_move(enum move, int); long ui_calendar_start_of_year(void); long ui_calendar_end_of_year(void); const char *ui_calendar_get_pom(time_t); /* config.c */ void config_load(void); unsigned config_save(void); /* custom.c */ void custom_init_attr(void); void custom_apply_attr(WINDOW *, int); void custom_remove_attr(WINDOW *, int); void custom_layout_config(void); void custom_sidebar_config(void); void custom_color_config(void); void custom_color_theme_name(char *); void custom_confwin_init(struct window *, const char *); void custom_set_swsiz(struct scrollwin *); void custom_general_config(void); void custom_keys_config(void); void custom_config_main(void); /* day.c */ void day_free_vector(void); char *day_item_get_mesg(struct day_item *); char *day_item_get_note(struct day_item *); void day_item_erase_note(struct day_item *); long day_item_get_duration(struct day_item *); int day_item_get_state(struct day_item *); void day_item_add_exc(struct day_item *, long); void day_item_fork(struct day_item *, struct day_item *); void day_store_items(long, int); void day_process_storage(struct date *, unsigned); void day_display_item_date(struct day_item *, WINDOW *, int, long, int, int); void day_display_item(struct day_item *, WINDOW *, int, int, int, int); void day_write_stdout(long, const char *, const char *, const char *, const char *, int *); void day_popup_item(struct day_item *); int day_check_if_item(struct date); 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); struct day_item *day_get_item(int); unsigned day_item_count(int); void day_edit_note(struct day_item *, const char *); void day_view_note(struct day_item *, const char *); void day_item_switch_notify(struct day_item *); /* dmon.c */ void dmon_start(int); void dmon_stop(void); /* event.c */ extern llist_t eventlist; void event_free_bkp(void); struct event *event_dup(struct event *); void event_free(struct event *); void event_llist_init(void); void event_llist_free(void); struct event *event_new(char *, char *, long, int); unsigned event_inday(struct event *, long *); void event_write(struct event *, FILE *); struct event *event_scan(FILE *, struct tm, int, char *, struct item_filter *); void event_delete(struct event *); void event_paste_item(struct event *, long); /* getstring.c */ enum getstr getstring(WINDOW *, char *, int, int, int); int updatestring(WINDOW *, char **, int, int); /* help.c */ int display_help(const char *); /* ical.c */ void ical_import_data(FILE *, FILE *, unsigned *, unsigned *, unsigned *, unsigned *, unsigned *); void ical_export_data(FILE *); /* io.c */ unsigned io_fprintln(const char *, const char *, ...); void io_init(const char *, const char *); void io_extract_data(char *, const char *, int); void io_save_mutex_lock(void); void io_save_mutex_unlock(void); unsigned io_save_apts(const char *); unsigned io_save_todo(const char *); unsigned io_save_keys(void); void io_save_cal(enum save_display); void io_load_app(struct item_filter *); void io_load_todo(struct item_filter *); void io_load_data(struct item_filter *); void io_reload_data(void); void io_load_keys(const char *); int io_check_dir(const char *); unsigned io_dir_exists(const char *); unsigned io_file_exists(const char *); int io_check_file(const char *); int io_check_data_files(void); void io_startup_screen(int); void io_export_data(enum export_type); void io_import_data(enum import_type, const char *); struct io_file *io_log_init(void); void io_log_print(struct io_file *, int, const char *); void io_log_display(struct io_file *, const char *, const char *); void io_log_free(struct io_file *); void io_start_psave_thread(void); void io_stop_psave_thread(void); void io_set_lock(void); unsigned io_dump_pid(char *); unsigned io_get_pid(char *); int io_files_equal(const char *, const char *); int io_file_is_empty(char *); int io_file_cp(const char *, const char *); void io_unset_modified(void); void io_set_modified(void); int io_get_modified(void); /* keys.c */ void keys_init(void); void keys_free(void); void keys_dump_defaults(char *); const char *keys_get_label(enum key); enum key keys_get_action(int); enum key keys_getch(WINDOW * win, int *, int *); int keys_assign_binding(int, enum key); void keys_remove_binding(int, enum key); int keys_str2int(const char *); const char *keys_int2str(int); int keys_action_count_keys(enum key); const char *keys_action_firstkey(enum key); const char *keys_action_nkey(enum key, int); char *keys_action_allkeys(enum key); void keys_display_bindings_bar(WINDOW *, int *, int, int, int); void keys_popup_info(enum key); void keys_save_bindings(FILE *); int keys_check_missing_bindings(void); void keys_fill_missing(void); /* listbox.c */ void listbox_init(struct listbox *, int, int, int, int, const char *, listbox_fn_item_type_t, listbox_fn_item_height_t, listbox_fn_draw_item_t); void listbox_delete(struct listbox *); void listbox_resize(struct listbox *, int, int, int, int); void listbox_set_cb_data(struct listbox *, void *); void listbox_load_items(struct listbox *, int); void listbox_draw_deco(struct listbox *, int); void listbox_display(struct listbox *); int listbox_get_sel(struct listbox *); void listbox_set_sel(struct listbox *, unsigned); void listbox_sel_move(struct listbox *, int); /* mem.c */ void *xmalloc(size_t); void *xcalloc(size_t, size_t); void *xrealloc(void *, size_t, size_t); char *xstrdup(const char *); void xfree(void *); #ifdef CALCURSE_MEMORY_DEBUG #define mem_malloc(s) dbg_malloc ((s), __FILE_POS__) #define mem_calloc(n, s) dbg_calloc ((n), (s), __FILE_POS__) #define mem_realloc(p, n, s) dbg_realloc ((p), (n), (s), __FILE_POS__) #define mem_strdup(s) dbg_strdup ((s), __FILE_POS__) #define mem_free(p) dbg_free ((p), __FILE_POS__) void *dbg_malloc(size_t, const char *); void *dbg_calloc(size_t, size_t, const char *); void *dbg_realloc(void *, size_t, size_t, const char *); char *dbg_strdup(const char *, const char *); void dbg_free(void *, const char *); void mem_stats(void); #else /* MEMORY DEBUG disabled */ #define mem_malloc(s) xmalloc ((s)) #define mem_calloc(n, s) xcalloc ((n), (s)) #define mem_realloc(p, n, s) xrealloc ((p), (n), (s)) #define mem_strdup(s) xstrdup ((s)) #define mem_free(p) xfree ((p)) #define mem_stats() #endif /* CALCURSE_MEMORY_DEBUG */ /* note.c */ char *generate_note(const char *); void edit_note(char **, const char *); void view_note(const char *, const char *); void erase_note(char **); void note_read(char *, FILE *); void note_gc(void); /* notify.c */ int notify_time_left(void); unsigned notify_needs_reminder(void); void notify_update_app(long, char, char *); int notify_bar(void); void notify_init_vars(void); void notify_init_bar(void); void notify_free_app(void); void notify_start_main_thread(void); void notify_stop_main_thread(void); void notify_reinit_bar(void); unsigned notify_launch_cmd(void); void notify_update_bar(void); unsigned notify_get_next(struct notify_app *); unsigned notify_get_next_bkgd(void); char *notify_app_txt(void); void notify_check_next_app(int); void notify_check_added(char *, long, char); void notify_check_repeated(struct recur_apoint *); int notify_same_item(long); int notify_same_recur_item(struct recur_apoint *); void notify_config_bar(void); /* pcal.c */ void pcal_export_data(FILE *); /* recur.c */ extern llist_ts_t recur_alist_p; extern llist_t recur_elist; struct recur_event *recur_event_dup(struct recur_event *); struct recur_apoint *recur_apoint_dup(struct recur_apoint *); void recur_event_free_bkp(void); void recur_apoint_free_bkp(void); void recur_event_free(struct recur_event *); void recur_apoint_free(struct recur_apoint *); void recur_apoint_llist_init(void); void recur_event_llist_init(void); void recur_apoint_llist_free(void); void recur_event_llist_free(void); struct recur_apoint *recur_apoint_new(char *, char *, long, long, char, int, int, long, llist_t *); struct recur_event *recur_event_new(char *, char *, long, int, int, int, long, llist_t *); char recur_def2char(enum recur_type); int recur_char2def(char); struct recur_apoint *recur_apoint_scan(FILE *, struct tm, struct tm, char, int, struct tm, char *, llist_t *, char, struct item_filter *); struct recur_event *recur_event_scan(FILE *, struct tm, int, char, int, struct tm, char *, llist_t *, struct item_filter *); void recur_apoint_write(struct recur_apoint *, FILE *); void recur_event_write(struct recur_event *, FILE *); void recur_save_data(FILE *); unsigned recur_item_find_occurrence(long, long, llist_t *, int, int, long, long, unsigned *); unsigned recur_apoint_find_occurrence(struct recur_apoint *, long, unsigned *); unsigned recur_event_find_occurrence(struct recur_event *, long, unsigned *); unsigned recur_item_inday(long, long, llist_t *, int, int, long, long); unsigned recur_apoint_inday(struct recur_apoint *, long *); unsigned recur_event_inday(struct recur_event *, long *); void recur_event_add_exc(struct recur_event *, long); void recur_apoint_add_exc(struct recur_apoint *, long); void recur_event_erase(struct recur_event *); void recur_apoint_erase(struct recur_apoint *); void recur_exc_scan(llist_t *, FILE *); struct notify_app *recur_apoint_check_next(struct notify_app *, long, long); void recur_apoint_switch_notify(struct recur_apoint *); void recur_event_paste_item(struct recur_event *, long); void recur_apoint_paste_item(struct recur_apoint *, long); /* sigs.c */ void sigs_init(void); unsigned sigs_set_hdlr(int, void (*)(int)); void sigs_ignore(void); void sigs_unignore(void); /* todo.c */ extern llist_t todolist; struct todo *todo_get_item(int); struct todo *todo_add(char *, int, char *); void todo_write(struct todo *, FILE *); void todo_delete_note(struct todo *); void todo_delete(struct todo *); void todo_flag(struct todo *); int todo_get_position(struct todo *); void todo_edit_note(struct todo *, const char *); void todo_view_note(struct todo *, const char *); void todo_free(struct todo *); void todo_init_list(void); void todo_free_list(void); /* ui-day.c */ void ui_day_item_add(void); void ui_day_item_delete(unsigned); void ui_day_item_edit(void); void ui_day_item_pipe(void); void ui_day_item_repeat(void); void ui_day_item_cut_free(unsigned); void ui_day_item_copy(unsigned); void ui_day_item_paste(unsigned); void ui_day_load_items(void); void ui_day_sel_reset(void); void ui_day_sel_move(int); void ui_day_draw(int, WINDOW *, int, int, void *); enum listbox_row_type ui_day_row_type(int, void *); int ui_day_height(int, void *); void ui_day_update_panel(int); void ui_day_popup_item(void); void ui_day_flag(void); void ui_day_view_note(void); void ui_day_edit_note(void); /* ui-todo.c */ void ui_todo_add(void); void ui_todo_delete(void); void ui_todo_edit(void); void ui_todo_pipe(void); void ui_todo_draw(int, WINDOW *, int, int, void *); enum listbox_row_type ui_todo_row_type(int, void *); int ui_todo_height(int, void *); void ui_todo_load_items(void); void ui_todo_sel_reset(void); void ui_todo_sel_move(int); void ui_todo_update_panel(int); void ui_todo_chg_priority(int); void ui_todo_popup_item(void); void ui_todo_flag(void); void ui_todo_view_note(void); void ui_todo_edit_note(void); /* utf8.c */ int utf8_width(char *); int utf8_strwidth(char *); /* utils.c */ void exit_calcurse(int) __attribute__ ((__noreturn__)); void free_user_data(void); void fatalbox(const char *); void warnbox(const char *); void status_mesg(const char *, const char *); int status_ask_choice(const char *, const char[], int); int status_ask_bool(const char *); int status_ask_simplechoice(const char *, const char *[], int); void erase_window_part(WINDOW *, int, int, int, int); WINDOW *popup(int, int, int, int, const char *, const char *, int); void print_in_middle(WINDOW *, int, int, int, const char *); int is_all_digit(const char *); long get_item_time(long); int get_item_hour(long); int get_item_min(long); long date2sec(struct date, unsigned, unsigned); char *date_sec2date_str(long, const char *); void date_sec2date_fmt(long, const char *, char *); long date_sec_change(long, int, int); long update_time_in_date(long, unsigned, unsigned); long get_sec_date(struct date); long min2sec(unsigned); void draw_scrollbar(WINDOW *, int, int, int, int, int, unsigned); void item_in_popup(const char *, const char *, const char *, const char *); long get_today(void); long now(void); char *nowstr(void); void print_bool_option_incolor(WINDOW *, unsigned, int, int); const char *get_tempdir(void); char *new_tempfile(const char *); int check_date(unsigned, unsigned, unsigned); int parse_date(const char *, enum datefmt, int *, int *, int *, struct date *); int check_time(unsigned, unsigned); int parse_time(const char *, unsigned *, unsigned *); int parse_duration(const char *, unsigned *); void file_close(FILE *, const char *); void psleep(unsigned); int fork_exec(int *, int *, const char *, const char *const *); int shell_exec(int *, int *, const char *, const char *const *); int child_wait(int *, int *, int); void press_any_key(void); void print_apoint(const char *, long, struct apoint *); void print_event(const char *, long, struct event *); void print_recur_apoint(const char *, long, unsigned, struct recur_apoint *); void print_recur_event(const char *, long, struct recur_event *); void print_todo(const char *, struct todo *); int vasprintf(char **, const char *, va_list); int asprintf(char **, const char *, ...); /* vars.c */ extern int col, row; extern int resize; extern unsigned colorize; extern int foreground, background; extern enum ui_mode ui_mode; extern int read_only; extern int want_reload; extern const char *datefmt_str[DATE_FORMATS]; extern int days[12]; extern const char *monthnames[12]; extern const char *daynames[8]; extern char path_dir[BUFSIZ]; extern char path_todo[BUFSIZ]; extern char path_apts[BUFSIZ]; extern char path_conf[BUFSIZ]; extern char path_keys[BUFSIZ]; extern char path_notes[BUFSIZ]; extern char path_cpid[BUFSIZ]; extern char path_dpid[BUFSIZ]; extern char path_dmon_log[BUFSIZ]; extern struct conf conf; extern struct pad apad; extern struct nbar nbar; extern struct dmon_conf dmon; void vars_init(void); /* wins.c */ extern struct window win[NBWINS]; extern struct scrollwin sw_cal; extern struct listbox lb_apt; extern struct listbox lb_todo; unsigned wins_nbar_lock(void); void wins_nbar_unlock(void); void wins_nbar_cleanup(void *); unsigned wins_calendar_lock(void); void wins_calendar_unlock(void); void wins_calendar_cleanup(void *); int wins_refresh(void); int wins_wrefresh(WINDOW *); int wins_doupdate(void); int wins_layout(void); void wins_set_layout(int); unsigned wins_sbar_width(void); unsigned wins_sbar_wperc(void); void wins_set_sbar_width(unsigned); void wins_sbar_winc(void); void wins_sbar_wdec(void); enum win wins_slctd(void); void wins_slctd_set(enum win); void wins_slctd_next(void); void wins_init(void); void wins_scrollwin_init(struct scrollwin *, int, int, int, int, const char *); void wins_scrollwin_resize(struct scrollwin *, int, int, int, int); void wins_scrollwin_set_linecount(struct scrollwin *, unsigned); void wins_scrollwin_delete(struct scrollwin *); void wins_scrollwin_draw_deco(struct scrollwin *, int); void wins_scrollwin_display(struct scrollwin *); void wins_scrollwin_up(struct scrollwin *, int); void wins_scrollwin_down(struct scrollwin *, int); int wins_scrollwin_is_visible(struct scrollwin *, unsigned); void wins_scrollwin_ensure_visible(struct scrollwin *, unsigned); void wins_scrollwin_set_lower(struct scrollwin *, unsigned); void wins_resize(void); void wins_resize_panels(void); void wins_show(WINDOW *, const char *); void wins_get_config(void); void wins_update_border(int); void wins_update_panels(int); void wins_update(int); void wins_reset_noupdate(void); void wins_reset(void); void wins_prepare_external(void); void wins_unprepare_external(void); void wins_launch_external(const char *[]); void wins_set_bindings(int *, int); void wins_update_bindings(void); void wins_status_bar(void); void wins_erase_status_bar(void); void wins_other_status_page(int); void wins_reset_status_page(void); #endif /* CALCURSE_H */ calcurse-4.0.0/src/config.c0000644000175000017500000004115612472326722012453 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include "calcurse.h" typedef int (*config_fn_parse_t) (void *, const char *); typedef int (*config_fn_serialize_t) (char **, void *); struct confvar { const char *key; config_fn_parse_t fn_parse; config_fn_serialize_t fn_serialize; void *target; }; static int config_parse_bool(unsigned *, const char *); static int config_serialize_bool(char **, unsigned *); static int config_parse_int(int *, const char *); static int config_serialize_int(char **, int *); static int config_parse_unsigned(unsigned *, const char *); static int config_serialize_unsigned(char **, unsigned *); static int config_parse_str(char *, const char *); static int config_serialize_str(char **, const char *); static int config_parse_calendar_view(void *, const char *); static int config_serialize_calendar_view(char **, void *); static int config_parse_default_panel(void *, const char *); static int config_serialize_default_panel(char **, void *); static int config_parse_first_day_of_week(void *, const char *); static int config_serialize_first_day_of_week(char **, void *); static int config_parse_color_theme(void *, const char *); static int config_serialize_color_theme(char **, void *); static int config_parse_layout(void *, const char *); static int config_serialize_layout(char **, void *); static int config_parse_sidebar_width(void *, const char *); static int config_serialize_sidebar_width(char **, void *); static int config_parse_output_datefmt(void *, const char *); static int config_serialize_output_datefmt(char **, void *); static int config_parse_input_datefmt(void *, const char *); static int config_serialize_input_datefmt(char **, void *); #define CONFIG_HANDLER_BOOL(var) (config_fn_parse_t) config_parse_bool, \ (config_fn_serialize_t) config_serialize_bool, &(var) #define CONFIG_HANDLER_INT(var) (config_fn_parse_t) config_parse_int, \ (config_fn_serialize_t) config_serialize_int, &(var) #define CONFIG_HANDLER_UNSIGNED(var) (config_fn_parse_t) config_parse_unsigned, \ (config_fn_serialize_t) config_serialize_unsigned, &(var) #define CONFIG_HANDLER_STR(var) (config_fn_parse_t) config_parse_str, \ (config_fn_serialize_t) config_serialize_str, &(var) static const struct confvar confmap[] = { {"appearance.calendarview", config_parse_calendar_view, config_serialize_calendar_view, NULL}, {"appearance.compactpanels", CONFIG_HANDLER_BOOL(conf.compact_panels)}, {"appearance.defaultpanel", config_parse_default_panel, config_serialize_default_panel, NULL}, {"appearance.layout", config_parse_layout, config_serialize_layout, NULL}, {"appearance.notifybar", CONFIG_HANDLER_BOOL(nbar.show)}, {"appearance.sidebarwidth", config_parse_sidebar_width, config_serialize_sidebar_width, NULL}, {"appearance.theme", config_parse_color_theme, config_serialize_color_theme, NULL}, {"daemon.enable", CONFIG_HANDLER_BOOL(dmon.enable)}, {"daemon.log", CONFIG_HANDLER_BOOL(dmon.log)}, {"format.inputdate", config_parse_input_datefmt, config_serialize_input_datefmt, NULL}, {"format.notifydate", CONFIG_HANDLER_STR(nbar.datefmt)}, {"format.notifytime", CONFIG_HANDLER_STR(nbar.timefmt)}, {"format.outputdate", config_parse_output_datefmt, config_serialize_output_datefmt, NULL}, {"general.autogc", CONFIG_HANDLER_BOOL(conf.auto_gc)}, {"general.autosave", CONFIG_HANDLER_BOOL(conf.auto_save)}, {"general.confirmdelete", CONFIG_HANDLER_BOOL(conf.confirm_delete)}, {"general.confirmquit", CONFIG_HANDLER_BOOL(conf.confirm_quit)}, {"general.firstdayofweek", config_parse_first_day_of_week, config_serialize_first_day_of_week, NULL}, {"general.periodicsave", CONFIG_HANDLER_UNSIGNED(conf.periodic_save)}, {"general.progressbar", CONFIG_HANDLER_BOOL(conf.progress_bar)}, {"general.systemdialogs", CONFIG_HANDLER_BOOL(conf.system_dialogs)}, {"notification.command", CONFIG_HANDLER_STR(nbar.cmd)}, {"notification.notifyall", CONFIG_HANDLER_BOOL(nbar.notify_all)}, {"notification.warning", CONFIG_HANDLER_INT(nbar.cntdwn)} }; struct config_save_status { FILE *fp; int done[ARRAY_SIZE(confmap)]; }; typedef int (*config_fn_walk_cb_t) (const char *, const char *, void *); typedef int (*config_fn_walk_junk_cb_t) (const char *, void *); static int config_parse_bool(unsigned *dest, const char *val) { if (strcmp(val, "yes") == 0) *dest = 1; else if (strcmp(val, "no") == 0) *dest = 0; else return 0; return 1; } static int config_parse_unsigned(unsigned *dest, const char *val) { if (is_all_digit(val)) *dest = atoi(val); else return 0; return 1; } static int config_parse_int(int *dest, const char *val) { if ((*val == '+' || *val == '-' || isdigit(*val)) && is_all_digit(val + 1)) *dest = atoi(val); else return 0; return 1; } static int config_parse_str(char *dest, const char *val) { strncpy(dest, val, BUFSIZ); return 1; } static int config_parse_color(int *dest, const char *val) { if (!strcmp(val, "black")) *dest = COLOR_BLACK; else if (!strcmp(val, "red")) *dest = COLOR_RED; else if (!strcmp(val, "green")) *dest = COLOR_GREEN; else if (!strcmp(val, "yellow")) *dest = COLOR_YELLOW; else if (!strcmp(val, "blue")) *dest = COLOR_BLUE; else if (!strcmp(val, "magenta")) *dest = COLOR_MAGENTA; else if (!strcmp(val, "cyan")) *dest = COLOR_CYAN; else if (!strcmp(val, "white")) *dest = COLOR_WHITE; else if (!strcmp(val, "default")) *dest = background; else return 0; return 1; } static int config_parse_color_pair(int *dest1, int *dest2, const char *val) { char s1[BUFSIZ], s2[BUFSIZ]; if (sscanf(val, "%s on %s", s1, s2) != 2) return 0; return (config_parse_color(dest1, s1) && config_parse_color(dest2, s2)); } static int config_parse_calendar_view(void *dummy, const char *val) { if (!strcmp(val, "monthly")) ui_calendar_set_view(CAL_MONTH_VIEW); else if (!strcmp(val, "weekly")) ui_calendar_set_view(CAL_WEEK_VIEW); else return 0; return 1; } static int config_parse_default_panel(void *dummy, const char *val) { if (!strcmp(val, "calendar")) conf.default_panel = CAL; else if (!strcmp(val, "appointments")) conf.default_panel = APP; else if (!strcmp(val, "todo")) conf.default_panel = TOD; else return 0; return 1; } static int config_parse_first_day_of_week(void *dummy, const char *val) { if (!strcmp(val, "monday")) ui_calendar_set_first_day_of_week(MONDAY); else if (!strcmp(val, "sunday")) ui_calendar_set_first_day_of_week(SUNDAY); else return 0; return 1; } static int config_parse_color_theme(void *dummy, const char *val) { int color1, color2; if (!strcmp(val, "0") || !strcmp(val, "none")) { colorize = 0; return 1; } if (!config_parse_color_pair(&color1, &color2, val)) return 0; init_pair(COLR_CUSTOM, color1, color2); return 1; } static int config_parse_layout(void *dummy, const char *val) { wins_set_layout(atoi(val)); return 1; } static int config_parse_sidebar_width(void *dummy, const char *val) { wins_set_sbar_width(atoi(val)); return 1; } static int config_parse_output_datefmt(void *dummy, const char *val) { if (val[0] != '\0') return config_parse_str(conf.output_datefmt, val); return 1; } static int config_parse_input_datefmt(void *dummy, const char *val) { if (config_parse_int(&conf.input_datefmt, val)) { if (conf.input_datefmt <= 0 || conf.input_datefmt > DATE_FORMATS) conf.input_datefmt = 1; return 1; } else { return 0; } } /* Set a configuration variable. */ static int config_set_conf(const char *key, const char *value) { int i; if (!key) return -1; for (i = 0; i < ARRAY_SIZE(confmap); i++) { if (!strcmp(confmap[i].key, key)) return confmap[i].fn_parse(confmap[i].target, value); } return -1; } static int config_serialize_bool(char **dest, unsigned *val) { *dest = mem_strdup(*val ? "yes" : "no"); return 1; } static int config_serialize_unsigned(char **dest, unsigned *val) { asprintf(dest, "%u", *val); return 1; } static int config_serialize_int(char **dest, int *val) { asprintf(dest, "%d", *val); return 1; } static int config_serialize_str(char **dest, const char *val) { *dest = mem_strdup(val); return 1; } /* * Return a string defining the color theme in the form: * foreground color 'on' background color * in order to dump this data in the configuration file. * Color numbers follow the ncurses library definitions. * If ncurses library was compiled with --enable-ext-funcs, * then default color is -1. */ static char *config_color_theme_name(void) { #define MAXCOLORS 8 #define NBCOLORS 2 #define DEFAULTCOLOR 255 #define DEFAULTCOLOR_EXT -1 char *theme; int i; short color[NBCOLORS]; const char *color_name[NBCOLORS]; const char *default_color = "default"; const char *name[MAXCOLORS] = { "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white" }; if (!colorize) { return mem_strdup("none"); } pair_content(COLR_CUSTOM, &color[0], &color[1]); for (i = 0; i < NBCOLORS; i++) { if ((color[i] == DEFAULTCOLOR) || (color[i] == DEFAULTCOLOR_EXT)) { color_name[i] = default_color; } else if (color[i] >= 0 && color[i] <= MAXCOLORS) { color_name[i] = name[color[i]]; } else { EXIT(_("unknown color")); /* NOTREACHED */ } } asprintf(&theme, "%s on %s", color_name[0], color_name[1]); return theme; } static int config_serialize_calendar_view(char **buf, void *dummy) { if (ui_calendar_get_view() == CAL_WEEK_VIEW) *buf = mem_strdup("weekly"); else *buf = mem_strdup("monthly"); return 1; } static int config_serialize_default_panel(char **buf, void *dummy) { if (conf.default_panel == CAL) *buf = mem_strdup("calendar"); else if (conf.default_panel == APP) *buf = mem_strdup("appointments"); else *buf = mem_strdup("todo"); return 1; } static int config_serialize_first_day_of_week(char **buf, void *dummy) { if (ui_calendar_week_begins_on_monday()) *buf = mem_strdup("monday"); else *buf = mem_strdup("sunday"); return 1; } static int config_serialize_color_theme(char **buf, void *dummy) { *buf = config_color_theme_name(); return 1; } static int config_serialize_layout(char **buf, void *dummy) { int tmp = wins_layout(); return config_serialize_int(buf, &tmp); } static int config_serialize_sidebar_width(char **buf, void *dummy) { int tmp = wins_sbar_wperc(); return config_serialize_int(buf, &tmp); } static int config_serialize_output_datefmt(char **buf, void *dummy) { return config_serialize_str(buf, conf.output_datefmt); } static int config_serialize_input_datefmt(char **buf, void *dummy) { return config_serialize_int(buf, &conf.input_datefmt); } /* Serialize the value of a configuration variable. */ static int config_serialize_conf(char **buf, const char *key, struct config_save_status *status) { int i; if (!key) return -1; for (i = 0; i < ARRAY_SIZE(confmap); i++) { if (!strcmp(confmap[i].key, key)) { if (confmap[i].fn_serialize(buf, confmap[i].target)) { if (status) status->done[i] = 1; return 1; } else { return 0; } } } return -1; } static void config_file_walk(config_fn_walk_cb_t fn_cb, config_fn_walk_junk_cb_t fn_junk_cb, void *data) { FILE *data_file; char buf[BUFSIZ], e_conf[BUFSIZ]; char *key, *value; data_file = fopen(path_conf, "r"); EXIT_IF(data_file == NULL, _("failed to open configuration file")); pthread_mutex_lock(&nbar.mutex); for (;;) { if (fgets(buf, sizeof buf, data_file) == NULL) break; io_extract_data(e_conf, buf, sizeof buf); if (*e_conf == '\0' || *e_conf == '#') { if (fn_junk_cb) fn_junk_cb(buf, data); continue; } key = e_conf; value = strchr(e_conf, '='); if (value) { *value = '\0'; value++; } else { EXIT(_("invalid configuration directive: \"%s\""), e_conf); } if (strcmp(key, "auto_save") == 0 || strcmp(key, "auto_gc") == 0 || strcmp(key, "periodic_save") == 0 || strcmp(key, "confirm_quit") == 0 || strcmp(key, "confirm_delete") == 0 || strcmp(key, "skip_system_dialogs") == 0 || strcmp(key, "skip_progress_bar") == 0 || strcmp(key, "calendar_default_view") == 0 || strcmp(key, "week_begins_on_monday") == 0 || strcmp(key, "color-theme") == 0 || strcmp(key, "layout") == 0 || strcmp(key, "side-bar_width") == 0 || strcmp(key, "notify-bar_show") == 0 || strcmp(key, "notify-bar_date") == 0 || strcmp(key, "notify-bar_clock") == 0 || strcmp(key, "notify-bar_warning") == 0 || strcmp(key, "notify-bar_command") == 0 || strcmp(key, "notify-all") == 0 || strcmp(key, "output_datefmt") == 0 || strcmp(key, "input_datefmt") == 0 || strcmp(key, "notify-daemon_enable") == 0 || strcmp(key, "notify-daemon_log") == 0) { WARN_MSG(_("Pre-3.0.0 configuration file format detected, " "please upgrade running `calcurse-upgrade`.")); } if (value && (*value == '\0' || *value == '\n')) { /* Backward compatibility mode. */ if (fgets(buf, sizeof buf, data_file) == NULL) break; io_extract_data(e_conf, buf, sizeof buf); if (*e_conf == '#') *e_conf = '\0'; value = e_conf; } fn_cb(key, value, data); } file_close(data_file, __FILE_POS__); pthread_mutex_unlock(&nbar.mutex); } static int config_load_cb(const char *key, const char *value, void *dummy) { int result = config_set_conf(key, value); if (result < 0) { EXIT(_("configuration variable unknown: \"%s\""), key); /* NOTREACHED */ } else if (result == 0) { EXIT(_("wrong configuration variable format for \"%s\""), key); /* NOTREACHED */ } return 1; } /* Load the user configuration. */ void config_load(void) { config_file_walk(config_load_cb, NULL, NULL); } static int config_save_cb(const char *key, const char *value, void *status) { char *buf; int result = config_serialize_conf(&buf, key, (struct config_save_status *)status); if (result < 0) { EXIT(_("configuration variable unknown: \"%s\""), key); /* NOTREACHED */ } else if (result == 0) { EXIT(_("wrong configuration variable format for \"%s\""), key); /* NOTREACHED */ } fputs(key, ((struct config_save_status *)status)->fp); fputc('=', ((struct config_save_status *)status)->fp); fputs(buf, ((struct config_save_status *)status)->fp); fputc('\n', ((struct config_save_status *)status)->fp); mem_free(buf); return 1; } static int config_save_junk_cb(const char *data, void *status) { fputs(data, ((struct config_save_status *)status)->fp); return 1; } /* Save the user configuration. */ unsigned config_save(void) { char *tmpprefix = NULL, *tmppath = NULL; struct config_save_status status; int i; int ret = 0; if (read_only) return 1; asprintf(&tmpprefix, "%s/%s", get_tempdir(), CONF_PATH_NAME); if ((tmppath = new_tempfile(tmpprefix)) == NULL) goto cleanup; status.fp = fopen(tmppath, "w"); if (!status.fp) goto cleanup; memset(status.done, 0, sizeof(status.done)); config_file_walk(config_save_cb, config_save_junk_cb, (void *)&status); /* Set variables that were missing from the configuration file. */ for (i = 0; i < ARRAY_SIZE(confmap); i++) { if (!status.done[i]) config_save_cb(confmap[i].key, NULL, &status); } file_close(status.fp, __FILE_POS__); if (io_file_cp(tmppath, path_conf)) unlink(tmppath); ret = 1; cleanup: mem_free(tmpprefix); mem_free(tmppath); return ret; } calcurse-4.0.0/src/note.c0000644000175000017500000001404512472326722012150 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include "calcurse.h" #include "sha1.h" struct note_gc_hash { char *hash; char buf[MAX_NOTESIZ + 1]; HTABLE_ENTRY(note_gc_hash); }; static void note_gc_extract_key(struct note_gc_hash *, const char **, int *); static int note_gc_cmp(struct note_gc_hash *, struct note_gc_hash *); HTABLE_HEAD(htp, NOTE_GC_HSIZE, note_gc_hash); HTABLE_PROTOTYPE(htp, note_gc_hash) HTABLE_GENERATE(htp, note_gc_hash, note_gc_extract_key, note_gc_cmp) /* Create note file from a string and return a newly allocated string that * contains its name. */ char *generate_note(const char *str) { char *sha1 = mem_malloc(SHA1_DIGESTLEN * 2 + 1); char *notepath; FILE *fp; sha1_digest(str, sha1); asprintf(¬epath, "%s%s", path_notes, sha1); fp = fopen(notepath, "w"); EXIT_IF(fp == NULL, _("Warning: could not open %s, Aborting..."), notepath); fputs(str, fp); file_close(fp, __FILE_POS__); mem_free(notepath); return sha1; } /* Edit a note with an external editor. */ void edit_note(char **note, const char *editor) { char *tmpprefix = NULL, *tmppath = NULL; char *notepath = NULL; char *sha1 = mem_malloc(SHA1_DIGESTLEN * 2 + 1); FILE *fp; asprintf(&tmpprefix, "%s/calcurse-note", get_tempdir()); if ((tmppath = new_tempfile(tmpprefix)) == NULL) goto cleanup; if (*note != NULL) { asprintf(¬epath, "%s%s", path_notes, *note); io_file_cp(notepath, tmppath); } const char *arg[] = { editor, tmppath, NULL }; wins_launch_external(arg); if (io_file_is_empty(tmppath) > 0) { erase_note(note); } else if ((fp = fopen(tmppath, "r"))) { sha1_stream(fp, sha1); fclose(fp); *note = sha1; mem_free(notepath); asprintf(¬epath, "%s%s", path_notes, *note); io_file_cp(tmppath, notepath); mem_free(notepath); } unlink(tmppath); cleanup: mem_free(tmpprefix); mem_free(tmppath); } /* View a note in an external pager. */ void view_note(const char *note, const char *pager) { char *fullname; if (note == NULL) return; asprintf(&fullname, "%s%s", path_notes, note); const char *arg[] = { pager, fullname, NULL }; wins_launch_external(arg); mem_free(fullname); } /* Erase a note previously attached to an item. */ void erase_note(char **note) { if (*note == NULL) return; mem_free(*note); *note = NULL; } /* Read a serialized note file name from a stream and deserialize it. */ void note_read(char *buffer, FILE * fp) { int i; for (i = 0; i < MAX_NOTESIZ; i++) { buffer[i] = getc(fp); if (buffer[i] == ' ') { buffer[i] = '\0'; return; } } while (getc(fp) != ' ') ; buffer[MAX_NOTESIZ] = '\0'; } static void note_gc_extract_key(struct note_gc_hash *data, const char **key, int *len) { *key = data->hash; *len = strlen(data->hash); } static int note_gc_cmp(struct note_gc_hash *a, struct note_gc_hash *b) { return strcmp(a->hash, b->hash); } /* Spot and unlink unused note files. */ void note_gc(void) { struct htp gc_htable = HTABLE_INITIALIZER(&gc_htable); struct note_gc_hash *hp; DIR *dirp; struct dirent *dp; llist_item_t *i; struct note_gc_hash tmph; char *notepath; if (!(dirp = opendir(path_notes))) return; /* Insert all note file names into a hash table. */ do { if ((dp = readdir(dirp)) && *(dp->d_name) != '.') { hp = mem_malloc(sizeof(struct note_gc_hash)); strncpy(hp->buf, dp->d_name, MAX_NOTESIZ + 1); hp->hash = hp->buf; HTABLE_INSERT(htp, &gc_htable, hp); } } while (dp); closedir(dirp); /* Remove hashes that are actually in use. */ LLIST_TS_FOREACH(&alist_p, i) { struct apoint *apt = LLIST_GET_DATA(i); if (apt->note) { tmph.hash = apt->note; free(HTABLE_REMOVE(htp, &gc_htable, &tmph)); } } LLIST_FOREACH(&eventlist, i) { struct event *ev = LLIST_GET_DATA(i); if (ev->note) { tmph.hash = ev->note; free(HTABLE_REMOVE(htp, &gc_htable, &tmph)); } } LLIST_TS_FOREACH(&recur_alist_p, i) { struct recur_apoint *rapt = LLIST_GET_DATA(i); if (rapt->note) { tmph.hash = rapt->note; free(HTABLE_REMOVE(htp, &gc_htable, &tmph)); } } LLIST_FOREACH(&recur_elist, i) { struct recur_event *rev = LLIST_GET_DATA(i); if (rev->note) { tmph.hash = rev->note; free(HTABLE_REMOVE(htp, &gc_htable, &tmph)); } } LLIST_FOREACH(&todolist, i) { struct todo *todo = LLIST_GET_DATA(i); if (todo->note) { tmph.hash = todo->note; free(HTABLE_REMOVE(htp, &gc_htable, &tmph)); } } /* Unlink unused note files. */ HTABLE_FOREACH(hp, htp, &gc_htable) { asprintf(¬epath, "%s%s", path_notes, hp->hash); unlink(notepath); mem_free(notepath); } } calcurse-4.0.0/src/recur.c0000644000175000017500000005500012472326722012317 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include #include "calcurse.h" llist_ts_t recur_alist_p; llist_t recur_elist; static void free_exc(struct excp *exc) { mem_free(exc); } static void free_exc_list(llist_t * exc) { LLIST_FREE_INNER(exc, free_exc); LLIST_FREE(exc); } static int exc_cmp_day(struct excp *a, struct excp *b) { return a->st < b->st ? -1 : (a->st == b->st ? 0 : 1); } static void recur_add_exc(llist_t * exc, long day) { struct excp *o = mem_malloc(sizeof(struct excp)); o->st = day; LLIST_ADD_SORTED(exc, o, exc_cmp_day); } static void exc_dup(llist_t * in, llist_t * exc) { llist_item_t *i; LLIST_INIT(in); if (exc) { LLIST_FOREACH(exc, i) { struct excp *p = LLIST_GET_DATA(i); recur_add_exc(in, p->st); } } } struct recur_event *recur_event_dup(struct recur_event *in) { EXIT_IF(!in, _("null pointer")); struct recur_event *rev = mem_malloc(sizeof(struct recur_event)); rev->id = in->id; rev->day = in->day; rev->mesg = mem_strdup(in->mesg); rev->rpt = mem_malloc(sizeof(struct rpt)); rev->rpt->type = in->rpt->type; rev->rpt->freq = in->rpt->freq; rev->rpt->until = in->rpt->until; exc_dup(&rev->exc, &in->exc); if (in->note) rev->note = mem_strdup(in->note); else rev->note = NULL; return rev; } struct recur_apoint *recur_apoint_dup(struct recur_apoint *in) { EXIT_IF(!in, _("null pointer")); struct recur_apoint *rapt = mem_malloc(sizeof(struct recur_apoint)); rapt->start = in->start; rapt->dur = in->dur; rapt->state = in->state; rapt->mesg = mem_strdup(in->mesg); rapt->rpt = mem_malloc(sizeof(struct rpt)); rapt->rpt->type = in->rpt->type; rapt->rpt->freq = in->rpt->freq; rapt->rpt->until = in->rpt->until; exc_dup(&rapt->exc, &in->exc); if (in->note) rapt->note = mem_strdup(in->note); else rapt->note = NULL; return rapt; } void recur_apoint_llist_init(void) { LLIST_TS_INIT(&recur_alist_p); } void recur_event_llist_init(void) { LLIST_INIT(&recur_elist); } void recur_apoint_free(struct recur_apoint *rapt) { mem_free(rapt->mesg); if (rapt->note) mem_free(rapt->note); if (rapt->rpt) mem_free(rapt->rpt); free_exc_list(&rapt->exc); mem_free(rapt); } void recur_event_free(struct recur_event *rev) { mem_free(rev->mesg); if (rev->note) mem_free(rev->note); if (rev->rpt) mem_free(rev->rpt); free_exc_list(&rev->exc); mem_free(rev); } void recur_apoint_llist_free(void) { LLIST_TS_FREE_INNER(&recur_alist_p, recur_apoint_free); LLIST_TS_FREE(&recur_alist_p); } void recur_event_llist_free(void) { LLIST_FREE_INNER(&recur_elist, recur_event_free); LLIST_FREE(&recur_elist); } static int recur_apoint_cmp_start(struct recur_apoint *a, struct recur_apoint *b) { return a->start < b->start ? -1 : (a->start == b->start ? 0 : 1); } static int recur_event_cmp_day(struct recur_event *a, struct recur_event *b) { return a->day < b->day ? -1 : (a->day == b->day ? 0 : 1); } /* Insert a new recursive appointment in the general linked list */ struct recur_apoint *recur_apoint_new(char *mesg, char *note, long start, long dur, char state, int type, int freq, long until, llist_t * except) { struct recur_apoint *rapt = mem_malloc(sizeof(struct recur_apoint)); rapt->rpt = mem_malloc(sizeof(struct rpt)); rapt->mesg = mem_strdup(mesg); rapt->note = (note != NULL) ? mem_strdup(note) : 0; rapt->start = start; rapt->state = state; rapt->dur = dur; rapt->rpt->type = type; rapt->rpt->freq = freq; rapt->rpt->until = until; if (except) { exc_dup(&rapt->exc, except); free_exc_list(except); } else { LLIST_INIT(&rapt->exc); } LLIST_TS_LOCK(&recur_alist_p); LLIST_TS_ADD_SORTED(&recur_alist_p, rapt, recur_apoint_cmp_start); LLIST_TS_UNLOCK(&recur_alist_p); return rapt; } /* Insert a new recursive event in the general linked list */ struct recur_event *recur_event_new(char *mesg, char *note, long day, int id, int type, int freq, long until, llist_t * except) { struct recur_event *rev = mem_malloc(sizeof(struct recur_event)); rev->rpt = mem_malloc(sizeof(struct rpt)); rev->mesg = mem_strdup(mesg); rev->note = (note != NULL) ? mem_strdup(note) : 0; rev->day = day; rev->id = id; rev->rpt->type = type; rev->rpt->freq = freq; rev->rpt->until = until; if (except) { exc_dup(&rev->exc, except); free_exc_list(except); } else { LLIST_INIT(&rev->exc); } LLIST_ADD_SORTED(&recur_elist, rev, recur_event_cmp_day); return rev; } /* * Correspondance between the defines on recursive type, * and the letter to be written in file. */ char recur_def2char(enum recur_type define) { char recur_char; switch (define) { case RECUR_DAILY: recur_char = 'D'; break; case RECUR_WEEKLY: recur_char = 'W'; break; case RECUR_MONTHLY: recur_char = 'M'; break; case RECUR_YEARLY: recur_char = 'Y'; break; default: EXIT(_("unknown repetition type")); return 0; } return recur_char; } /* * Correspondance between the letters written in file and the defines * concerning the recursive type. */ int recur_char2def(char type) { int recur_def; switch (type) { case 'D': recur_def = RECUR_DAILY; break; case 'W': recur_def = RECUR_WEEKLY; break; case 'M': recur_def = RECUR_MONTHLY; break; case 'Y': recur_def = RECUR_YEARLY; break; default: EXIT(_("unknown character")); return 0; } return recur_def; } /* Write days for which recurrent items should not be repeated. */ static void recur_write_exc(llist_t * lexc, FILE * f) { llist_item_t *i; struct tm lt; time_t t; int st_mon, st_day, st_year; LLIST_FOREACH(lexc, i) { struct excp *exc = LLIST_GET_DATA(i); t = exc->st; localtime_r(&t, <); st_mon = lt.tm_mon + 1; st_day = lt.tm_mday; st_year = lt.tm_year + 1900; fprintf(f, " !%02u/%02u/%04u", st_mon, st_day, st_year); } } /* Load the recursive appointment description */ struct recur_apoint *recur_apoint_scan(FILE * f, struct tm start, struct tm end, char type, int freq, struct tm until, char *note, llist_t * exc, char state, struct item_filter *filter) { char buf[BUFSIZ], *nl; time_t tstart, tend, tuntil; EXIT_IF(!check_date(start.tm_year, start.tm_mon, start.tm_mday) || !check_date(end.tm_year, end.tm_mon, end.tm_mday) || !check_time(start.tm_hour, start.tm_min) || !check_time(end.tm_hour, end.tm_min) || (until.tm_year != 0 && !check_date(until.tm_year, until.tm_mon, until.tm_mday)), _("date error in appointment")); /* Read the appointment description */ if (!fgets(buf, sizeof buf, f)) return NULL; nl = strchr(buf, '\n'); if (nl) { *nl = '\0'; } start.tm_sec = end.tm_sec = 0; start.tm_isdst = end.tm_isdst = -1; start.tm_year -= 1900; start.tm_mon--; end.tm_year -= 1900; end.tm_mon--; tstart = mktime(&start); tend = mktime(&end); if (until.tm_year != 0) { until.tm_hour = 23; until.tm_min = 59; until.tm_sec = 0; until.tm_isdst = -1; until.tm_year -= 1900; until.tm_mon--; tuntil = mktime(&until); } else { tuntil = 0; } EXIT_IF(tstart == -1 || tend == -1 || tstart > tend || tuntil == -1, _("date error in appointment")); /* Filter item. */ if (filter) { if (!(filter->type_mask & TYPE_MASK_RECUR_APPT)) return NULL; if (filter->regex && regexec(filter->regex, buf, 0, 0, 0)) return NULL; if (filter->start_from >= 0 && tstart < filter->start_from) return NULL; if (filter->start_to >= 0 && tstart > filter->start_to) return NULL; if (filter->end_from >= 0 && tend < filter->end_from) return NULL; if (filter->end_to >= 0 && tend > filter->end_to) return NULL; } return recur_apoint_new(buf, note, tstart, tend - tstart, state, recur_char2def(type), freq, tuntil, exc); } /* Load the recursive events from file */ struct recur_event *recur_event_scan(FILE * f, struct tm start, int id, char type, int freq, struct tm until, char *note, llist_t * exc, struct item_filter *filter) { char buf[BUFSIZ], *nl; time_t tstart, tuntil; EXIT_IF(!check_date(start.tm_year, start.tm_mon, start.tm_mday) || !check_time(start.tm_hour, start.tm_min) || (until.tm_year != 0 && !check_date(until.tm_year, until.tm_mon, until.tm_mday)), _("date error in event")); /* Read the event description */ if (!fgets(buf, sizeof buf, f)) return NULL; nl = strchr(buf, '\n'); if (nl) { *nl = '\0'; } start.tm_hour = until.tm_hour = 0; start.tm_min = until.tm_min = 0; start.tm_sec = until.tm_sec = 0; start.tm_isdst = until.tm_isdst = -1; start.tm_year -= 1900; start.tm_mon--; if (until.tm_year != 0) { until.tm_year -= 1900; until.tm_mon--; tuntil = mktime(&until); } else { tuntil = 0; } tstart = mktime(&start); EXIT_IF(tstart == -1 || tuntil == -1, _("date error in event")); /* Filter item. */ if (filter) { if (!(filter->type_mask & TYPE_MASK_RECUR_EVNT)) return NULL; if (filter->regex && regexec(filter->regex, buf, 0, 0, 0)) return NULL; if (filter->start_from >= 0 && tstart < filter->start_from) return NULL; if (filter->start_to >= 0 && tstart > filter->start_to) return NULL; } return recur_event_new(buf, note, tstart, id, recur_char2def(type), freq, tuntil, exc); } /* Writting of a recursive appointment into file. */ void recur_apoint_write(struct recur_apoint *o, FILE * f) { struct tm lt; time_t t; t = o->start; localtime_r(&t, <); fprintf(f, "%02u/%02u/%04u @ %02u:%02u", lt.tm_mon + 1, lt.tm_mday, 1900 + lt.tm_year, lt.tm_hour, lt.tm_min); t = o->start + o->dur; localtime_r(&t, <); fprintf(f, " -> %02u/%02u/%04u @ %02u:%02u", lt.tm_mon + 1, lt.tm_mday, 1900 + lt.tm_year, lt.tm_hour, lt.tm_min); t = o->rpt->until; if (t == 0) { /* We have an endless recurrent appointment. */ fprintf(f, " {%d%c", o->rpt->freq, recur_def2char(o->rpt->type)); } else { localtime_r(&t, <); fprintf(f, " {%d%c -> %02u/%02u/%04u", o->rpt->freq, recur_def2char(o->rpt->type), lt.tm_mon + 1, lt.tm_mday, 1900 + lt.tm_year); } recur_write_exc(&o->exc, f); fputs("} ", f); if (o->note != NULL) fprintf(f, ">%s ", o->note); if (o->state & APOINT_NOTIFY) fputc('!', f); else fputc('|', f); fprintf(f, "%s\n", o->mesg); } /* Writting of a recursive event into file. */ void recur_event_write(struct recur_event *o, FILE * f) { struct tm lt; time_t t; int st_mon, st_day, st_year; int end_mon, end_day, end_year; t = o->day; localtime_r(&t, <); st_mon = lt.tm_mon + 1; st_day = lt.tm_mday; st_year = lt.tm_year + 1900; t = o->rpt->until; if (t == 0) { /* We have an endless recurrent event. */ fprintf(f, "%02u/%02u/%04u [%d] {%d%c", st_mon, st_day, st_year, o->id, o->rpt->freq, recur_def2char(o->rpt->type)); } else { localtime_r(&t, <); end_mon = lt.tm_mon + 1; end_day = lt.tm_mday; end_year = lt.tm_year + 1900; fprintf(f, "%02u/%02u/%04u [%d] {%d%c -> %02u/%02u/%04u", st_mon, st_day, st_year, o->id, o->rpt->freq, recur_def2char(o->rpt->type), end_mon, end_day, end_year); } recur_write_exc(&o->exc, f); fputs("} ", f); if (o->note != NULL) fprintf(f, ">%s ", o->note); fprintf(f, "%s\n", o->mesg); } /* Write recursive items to file. */ void recur_save_data(FILE * f) { llist_item_t *i; LLIST_FOREACH(&recur_elist, i) { struct recur_event *rev = LLIST_GET_DATA(i); recur_event_write(rev, f); } LLIST_TS_LOCK(&recur_alist_p); LLIST_TS_FOREACH(&recur_alist_p, i) { struct recur_apoint *rapt = LLIST_GET_DATA(i); recur_apoint_write(rapt, f); } LLIST_TS_UNLOCK(&recur_alist_p); } /* * The two following defines together with the diff_days, diff_months and * diff_years functions were provided by Lukas Fleischer to correct the wrong * calculation of recurrent dates after a turn of year. */ #define BC(start, end, bs) \ (((end) - (start) + ((start) % bs) - ((end) % bs)) / bs \ + ((((start) % bs) == 0) ? 1 : 0)) #define LEAPCOUNT(start, end) \ (BC(start, end, 4) - BC(start, end, 100) + BC(start, end, 400)) /* Calculate the difference in days between two dates. */ static long diff_days(struct tm lt_start, struct tm lt_end) { long diff; if (lt_end.tm_year < lt_start.tm_year) return 0; diff = lt_end.tm_yday - lt_start.tm_yday; if (lt_end.tm_year > lt_start.tm_year) { diff += (lt_end.tm_year - lt_start.tm_year) * YEARINDAYS; diff += LEAPCOUNT(lt_start.tm_year + TM_YEAR_BASE, lt_end.tm_year + TM_YEAR_BASE - 1); } return diff; } /* Calculate the difference in months between two dates. */ static long diff_months(struct tm lt_start, struct tm lt_end) { long diff; if (lt_end.tm_year < lt_start.tm_year) return 0; diff = lt_end.tm_mon - lt_start.tm_mon; diff += (lt_end.tm_year - lt_start.tm_year) * YEARINMONTHS; return diff; } /* Calculate the difference in years between two dates. */ static long diff_years(struct tm lt_start, struct tm lt_end) { return lt_end.tm_year - lt_start.tm_year; } static int exc_inday(struct excp *exc, long *day_start) { return (exc->st >= *day_start && exc->st < *day_start + DAYINSEC); } /* * Check if the recurrent item belongs to the selected day, and if yes, store * the start date of the occurrence that belongs to the day in a buffer. * * This function was improved thanks to Tony's patch. * Thanks also to youshe for reporting daylight saving time related problems. * And finally thanks to Lukas for providing a patch to correct the wrong * calculation of recurrent dates after a turn of years. */ unsigned recur_item_find_occurrence(long item_start, long item_dur, llist_t * item_exc, int rpt_type, int rpt_freq, long rpt_until, long day_start, unsigned *occurrence) { struct date start_date; long diff, span; struct tm lt_day, lt_item, lt_item_day; time_t t; if (day_start < item_start - DAYINSEC + 1) return 0; if (rpt_until != 0 && day_start >= rpt_until + item_dur) return 0; t = day_start; localtime_r(&t, <_day); t = item_start; localtime_r(&t, <_item); lt_item_day = lt_item; lt_item_day.tm_sec = lt_item_day.tm_min = lt_item_day.tm_hour = 0; span = (item_start - mktime(<_item_day) + item_dur - 1) / DAYINSEC; switch (rpt_type) { case RECUR_DAILY: diff = diff_days(lt_item_day, lt_day) % rpt_freq; lt_item_day.tm_mday = lt_day.tm_mday - diff; lt_item_day.tm_mon = lt_day.tm_mon; lt_item_day.tm_year = lt_day.tm_year; break; case RECUR_WEEKLY: diff = diff_days(lt_item_day, lt_day) % (rpt_freq * WEEKINDAYS); lt_item_day.tm_mday = lt_day.tm_mday - diff; lt_item_day.tm_mon = lt_day.tm_mon; lt_item_day.tm_year = lt_day.tm_year; break; case RECUR_MONTHLY: diff = diff_months(lt_item_day, lt_day) % rpt_freq; if (lt_day.tm_mday < lt_item_day.tm_mday) diff++; lt_item_day.tm_mon = lt_day.tm_mon - diff; lt_item_day.tm_year = lt_day.tm_year; break; case RECUR_YEARLY: diff = diff_years(lt_item_day, lt_day) % rpt_freq; if (lt_day.tm_mon < lt_item_day.tm_mon || (lt_day.tm_mon == lt_item_day.tm_mon && lt_day.tm_mday < lt_item_day.tm_mday)) diff++; lt_item_day.tm_year = lt_day.tm_year - diff; break; default: EXIT(_("unknown item type")); } lt_item_day.tm_isdst = lt_day.tm_isdst; t = mktime(<_item_day); if (LLIST_FIND_FIRST(item_exc, &t, exc_inday)) return 0; if (rpt_until != 0 && t > rpt_until) return 0; localtime_r(&t, <_item_day); diff = diff_days(lt_item_day, lt_day); if (diff > span) return 0; if (occurrence) { start_date.dd = lt_item_day.tm_mday; start_date.mm = lt_item_day.tm_mon + 1; start_date.yyyy = lt_item_day.tm_year + 1900; *occurrence = date2sec(start_date, lt_item.tm_hour, lt_item.tm_min); } return 1; } unsigned recur_apoint_find_occurrence(struct recur_apoint *rapt, long day_start, unsigned *occurrence) { return recur_item_find_occurrence(rapt->start, rapt->dur, &rapt->exc, rapt->rpt->type, rapt->rpt->freq, rapt->rpt->until, day_start, occurrence); } unsigned recur_event_find_occurrence(struct recur_event *rev, long day_start, unsigned *occurrence) { return recur_item_find_occurrence(rev->day, DAYINSEC, &rev->exc, rev->rpt->type, rev->rpt->freq, rev->rpt->until, day_start, occurrence); } /* Check if a recurrent item belongs to the selected day. */ unsigned recur_item_inday(long item_start, long item_dur, llist_t * item_exc, int rpt_type, int rpt_freq, long rpt_until, long day_start) { /* We do not need the (real) start time of the occurrence here, so just * ignore the buffer. */ return recur_item_find_occurrence(item_start, item_dur, item_exc, rpt_type, rpt_freq, rpt_until, day_start, NULL); } unsigned recur_apoint_inday(struct recur_apoint *rapt, long *day_start) { return recur_item_inday(rapt->start, rapt->dur, &rapt->exc, rapt->rpt->type, rapt->rpt->freq, rapt->rpt->until, *day_start); } unsigned recur_event_inday(struct recur_event *rev, long *day_start) { return recur_item_inday(rev->day, DAYINSEC, &rev->exc, rev->rpt->type, rev->rpt->freq, rev->rpt->until, *day_start); } /* Add an exception to a recurrent event. */ void recur_event_add_exc(struct recur_event *rev, long date) { recur_add_exc(&rev->exc, date); } /* Add an exception to a recurrent appointment. */ void recur_apoint_add_exc(struct recur_apoint *rapt, long date) { int need_check_notify = 0; if (notify_bar()) need_check_notify = notify_same_recur_item(rapt); recur_add_exc(&rapt->exc, date); if (need_check_notify) notify_check_next_app(0); } /* * Delete a recurrent event from the list (if delete_whole is not null), * or delete only one occurence of the recurrent event. */ void recur_event_erase(struct recur_event *rev) { llist_item_t *i = LLIST_FIND_FIRST(&recur_elist, rev, NULL); if (!i) EXIT(_("event not found")); LLIST_REMOVE(&recur_elist, i); } /* * Delete a recurrent appointment from the list (if delete_whole is not null), * or delete only one occurence of the recurrent appointment. */ void recur_apoint_erase(struct recur_apoint *rapt) { LLIST_TS_LOCK(&recur_alist_p); llist_item_t *i = LLIST_TS_FIND_FIRST(&recur_alist_p, rapt, NULL); int need_check_notify = 0; if (!i) EXIT(_("appointment not found")); if (notify_bar()) need_check_notify = notify_same_recur_item(rapt); LLIST_TS_REMOVE(&recur_alist_p, i); if (need_check_notify) notify_check_next_app(0); LLIST_TS_UNLOCK(&recur_alist_p); } /* * Read days for which recurrent items must not be repeated * (such days are called exceptions). */ void recur_exc_scan(llist_t * lexc, FILE * data_file) { int c = 0; struct tm day; LLIST_INIT(lexc); while ((c = getc(data_file)) == '!') { ungetc(c, data_file); if (fscanf(data_file, "!%d / %d / %d ", &day.tm_mon, &day.tm_mday, &day.tm_year) != 3) { EXIT(_("syntax error in item date")); } EXIT_IF(!check_date(day.tm_year, day.tm_mon, day.tm_mday), _("date error in item exception")); day.tm_hour = 0; day.tm_min = day.tm_sec = 0; day.tm_isdst = -1; day.tm_year -= 1900; day.tm_mon--; struct excp *exc = mem_malloc(sizeof(struct excp)); exc->st = mktime(&day); LLIST_ADD(lexc, exc); } } static int recur_apoint_starts_before(struct recur_apoint *rapt, long time) { return rapt->start < time; } /* * Look in the appointment list if we have an item which starts before the item * stored in the notify_app structure (which is the next item to be notified). */ struct notify_app *recur_apoint_check_next(struct notify_app *app, long start, long day) { llist_item_t *i; unsigned real_recur_start_time; LLIST_TS_LOCK(&recur_alist_p); LLIST_TS_FIND_FOREACH(&recur_alist_p, &app->time, recur_apoint_starts_before, i) { struct recur_apoint *rapt = LLIST_TS_GET_DATA(i); if (recur_apoint_find_occurrence (rapt, day, &real_recur_start_time) && real_recur_start_time > start) { app->time = real_recur_start_time; app->txt = mem_strdup(rapt->mesg); app->state = rapt->state; app->got_app = 1; } } LLIST_TS_UNLOCK(&recur_alist_p); return app; } /* Switch recurrent item notification state. */ void recur_apoint_switch_notify(struct recur_apoint *rapt) { LLIST_TS_LOCK(&recur_alist_p); rapt->state ^= APOINT_NOTIFY; if (notify_bar()) notify_check_repeated(rapt); LLIST_TS_UNLOCK(&recur_alist_p); } void recur_event_paste_item(struct recur_event *rev, long date) { long time_shift; llist_item_t *i; time_shift = date - rev->day; rev->day += time_shift; if (rev->rpt->until != 0) rev->rpt->until += time_shift; LLIST_FOREACH(&rev->exc, i) { struct excp *exc = LLIST_GET_DATA(i); exc->st += time_shift; } LLIST_ADD_SORTED(&recur_elist, rev, recur_event_cmp_day); } void recur_apoint_paste_item(struct recur_apoint *rapt, long date) { long time_shift; llist_item_t *i; time_shift = (date + get_item_time(rapt->start)) - rapt->start; rapt->start += time_shift; if (rapt->rpt->until != 0) rapt->rpt->until += time_shift; LLIST_FOREACH(&rapt->exc, i) { struct excp *exc = LLIST_GET_DATA(i); exc->st += time_shift; } LLIST_TS_LOCK(&recur_alist_p); LLIST_TS_ADD_SORTED(&recur_alist_p, rapt, recur_apoint_cmp_start); LLIST_TS_UNLOCK(&recur_alist_p); if (notify_bar()) notify_check_repeated(rapt); } calcurse-4.0.0/src/apoint.c0000644000175000017500000001616212472326722012477 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include "calcurse.h" llist_ts_t alist_p; void apoint_free(struct apoint *apt) { mem_free(apt->mesg); erase_note(&apt->note); mem_free(apt); } struct apoint *apoint_dup(struct apoint *in) { EXIT_IF(!in, _("null pointer")); struct apoint *apt = mem_malloc(sizeof(struct apoint)); apt->start = in->start; apt->dur = in->dur; apt->state = in->state; apt->mesg = mem_strdup(in->mesg); if (in->note) apt->note = mem_strdup(in->note); else apt->note = NULL; return apt; } void apoint_llist_init(void) { LLIST_TS_INIT(&alist_p); } /* * Called before exit to free memory associated with the appointments linked * list. No need to be thread safe, as only the main process remains when * calling this function. */ void apoint_llist_free(void) { LLIST_TS_FREE_INNER(&alist_p, apoint_free); LLIST_TS_FREE(&alist_p); } static int apoint_cmp_start(struct apoint *a, struct apoint *b) { return a->start < b->start ? -1 : (a->start == b->start ? 0 : 1); } struct apoint *apoint_new(char *mesg, char *note, long start, long dur, char state) { struct apoint *apt; apt = mem_malloc(sizeof(struct apoint)); apt->mesg = mem_strdup(mesg); apt->note = (note != NULL) ? mem_strdup(note) : NULL; apt->state = state; apt->start = start; apt->dur = dur; LLIST_TS_LOCK(&alist_p); LLIST_TS_ADD_SORTED(&alist_p, apt, apoint_cmp_start); LLIST_TS_UNLOCK(&alist_p); return apt; } unsigned apoint_inday(struct apoint *i, long *start) { return (i->start <= *start + DAYINSEC && i->start + i->dur > *start); } void apoint_sec2str(struct apoint *o, long day, char *start, char *end) { struct tm lt; time_t t; if (o->start < day) { strncpy(start, "..:..", 6); } else { t = o->start; localtime_r(&t, <); snprintf(start, HRMIN_SIZE, "%02u:%02u", lt.tm_hour, lt.tm_min); } if (o->start + o->dur > day + DAYINSEC) { strncpy(end, "..:..", 6); } else { t = o->start + o->dur; localtime_r(&t, <); snprintf(end, HRMIN_SIZE, "%02u:%02u", lt.tm_hour, lt.tm_min); } } void apoint_write(struct apoint *o, FILE * f) { struct tm lt; time_t t; t = o->start; localtime_r(&t, <); fprintf(f, "%02u/%02u/%04u @ %02u:%02u", lt.tm_mon + 1, lt.tm_mday, 1900 + lt.tm_year, lt.tm_hour, lt.tm_min); t = o->start + o->dur; localtime_r(&t, <); fprintf(f, " -> %02u/%02u/%04u @ %02u:%02u ", lt.tm_mon + 1, lt.tm_mday, 1900 + lt.tm_year, lt.tm_hour, lt.tm_min); if (o->note != NULL) fprintf(f, ">%s ", o->note); if (o->state & APOINT_NOTIFY) fputc('!', f); else fputc('|', f); fprintf(f, "%s\n", o->mesg); } struct apoint *apoint_scan(FILE * f, struct tm start, struct tm end, char state, char *note, struct item_filter *filter) { char buf[BUFSIZ], *newline; time_t tstart, tend; EXIT_IF(!check_date(start.tm_year, start.tm_mon, start.tm_mday) || !check_date(end.tm_year, end.tm_mon, end.tm_mday) || !check_time(start.tm_hour, start.tm_min) || !check_time(end.tm_hour, end.tm_min), _("date error in appointment")); /* Read the appointment description */ if (!fgets(buf, sizeof buf, f)) return NULL; newline = strchr(buf, '\n'); if (newline) *newline = '\0'; start.tm_sec = end.tm_sec = 0; start.tm_isdst = end.tm_isdst = -1; start.tm_year -= 1900; start.tm_mon--; end.tm_year -= 1900; end.tm_mon--; tstart = mktime(&start); tend = mktime(&end); EXIT_IF(tstart == -1 || tend == -1 || tstart > tend, _("date error in appointment")); /* Filter item. */ if (filter) { if (!(filter->type_mask & TYPE_MASK_APPT)) return NULL; if (filter->regex && regexec(filter->regex, buf, 0, 0, 0)) return NULL; if (filter->start_from >= 0 && tstart < filter->start_from) return NULL; if (filter->start_to >= 0 && tstart > filter->start_to) return NULL; if (filter->end_from >= 0 && tend < filter->end_from) return NULL; if (filter->end_to >= 0 && tend > filter->end_to) return NULL; } return apoint_new(buf, note, tstart, tend - tstart, state); } void apoint_delete(struct apoint *apt) { LLIST_TS_LOCK(&alist_p); llist_item_t *i = LLIST_TS_FIND_FIRST(&alist_p, apt, NULL); int need_check_notify = 0; if (!i) EXIT(_("no such appointment")); if (notify_bar()) need_check_notify = notify_same_item(apt->start); LLIST_TS_REMOVE(&alist_p, i); if (need_check_notify) notify_check_next_app(0); LLIST_TS_UNLOCK(&alist_p); } static int apoint_starts_after(struct apoint *apt, long *time) { return apt->start > *time; } /* * Look in the appointment list if we have an item which starts before the item * stored in the notify_app structure (which is the next item to be notified). */ struct notify_app *apoint_check_next(struct notify_app *app, long start) { llist_item_t *i; LLIST_TS_LOCK(&alist_p); i = LLIST_TS_FIND_FIRST(&alist_p, &start, apoint_starts_after); if (i) { struct apoint *apt = LLIST_TS_GET_DATA(i); if (apt->start <= app->time) { app->time = apt->start; app->txt = mem_strdup(apt->mesg); app->state = apt->state; app->got_app = 1; } } LLIST_TS_UNLOCK(&alist_p); return app; } /* * Switch notification state. */ void apoint_switch_notify(struct apoint *apt) { LLIST_TS_LOCK(&alist_p); apt->state ^= APOINT_NOTIFY; if (notify_bar()) notify_check_added(apt->mesg, apt->start, apt->state); LLIST_TS_UNLOCK(&alist_p); } void apoint_paste_item(struct apoint *apt, long date) { apt->start = date + get_item_time(apt->start); LLIST_TS_LOCK(&alist_p); LLIST_TS_ADD_SORTED(&alist_p, apt, apoint_cmp_start); LLIST_TS_UNLOCK(&alist_p); if (notify_bar()) notify_check_added(apt->mesg, apt->start, apt->state); } calcurse-4.0.0/src/args.c0000644000175000017500000005330012472330243012125 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include #include #include #include "calcurse.h" /* Long options */ enum { OPT_FILTER_TYPE = 1000, OPT_FILTER_PATTERN, OPT_FILTER_START_FROM, OPT_FILTER_START_TO, OPT_FILTER_START_AFTER, OPT_FILTER_START_BEFORE, OPT_FILTER_START_RANGE, OPT_FILTER_END_FROM, OPT_FILTER_END_TO, OPT_FILTER_END_AFTER, OPT_FILTER_END_BEFORE, OPT_FILTER_END_RANGE, OPT_FILTER_PRIORITY, OPT_FILTER_COMPLETED, OPT_FILTER_UNCOMPLETED, OPT_FROM, OPT_TO, OPT_DAYS, OPT_FMT_APT, OPT_FMT_RAPT, OPT_FMT_EV, OPT_FMT_REV, OPT_FMT_TODO, OPT_READ_ONLY, OPT_STATUS }; /* * Print Calcurse usage and exit. */ static void usage(void) { const char *arg_usage = _("Usage: calcurse [-g|-h|-v] [-an] [-t[num]] [-i] [-x[format]]\n" " [-d |] [-s[date]] [-r[range]]\n" " [-c] [-D] [-S] [--status]\n" " [--read-only]\n"); fputs(arg_usage, stdout); } static void usage_try(void) { const char *arg_usage_try = _("Try 'calcurse -h' for more information.\n"); fputs(arg_usage_try, stdout); } /* * Print Calcurse version with a short copyright text and exit. */ static void version_arg(void) { const char *vtext = _("\nCopyright (c) 2004-2015 calcurse Development Team.\n" "This is free software; see the source for copying conditions.\n"); fprintf(stdout, _("Calcurse %s - text-based organizer\n"), VERSION); fputs(vtext, stdout); } static void more_info(void) { fputs(_("\nFor more information, type '?' from within Calcurse, " "or read the manpage.\n"), stdout); fputs(_("Mail feature requests and suggestions to .\n"), stdout); fputs(_("Mail bug reports to .\n"), stdout); } /* * Print the command line options and exit. */ static void help_arg(void) { const char *htext = _("\nMiscellaneous:\n" " -h, --help\n" " print this help and exit.\n" "\n -v, --version\n" " print calcurse version and exit.\n" "\n --status\n" " display the status of running instances of calcurse.\n" "\n --read-only\n" " Don't save configuration nor appointments/todos. Use with care.\n" "\nFiles:\n" " -c , --calendar \n" " specify the calendar to use (has precedence over '-D').\n" "\n -D , --directory \n" " specify the data directory to use.\n" "\tIf not specified, the default directory is ~/.calcurse\n" "\nNon-interactive:\n" " -a, --appointment\n" " print events and appointments for current day and exit.\n" "\n -d , --day \n" " print events and appointments for or upcoming days and" "\n\texit. To specify both a starting date and a range, use the\n" "\t'--startday' and the '--range' option.\n" "\n -g, --gc\n" " run the garbage collector for note files and exit. \n" "\n -i , --import \n" " import the icalendar data contained in . \n" "\n -n, --next\n" " print next appointment within upcoming 24 hours " "and exit. Also given\n\tis the remaining time before this " "next appointment.\n" "\n -l , --limit \n" " only print information regarding the next items. \n" "\n -r[num], --range[=num]\n" " print events and appointments for the [num] number of days" "\n\tand exit. If no [num] is given, a range of 1 day is considered.\n" "\n -s[date], --startday[=date]\n" " print events and appointments from [date] and exit.\n" "\tIf no [date] is given, the current day is considered.\n" "\n -S, --search=\n" " search for the given regular expression within events, appointments,\n" "\tand todos description.\n" "\n -t[num], --todo[=num]\n" " print todo list and exit. If the optional number [num] is given,\n" "\tthen only todos having a priority equal to [num] will be returned.\n" "\tThe priority number must be between 1 (highest) and 9 (lowest).\n" "\tIt is also possible to specify '0' for the priority, in which case\n" "\tonly completed tasks will be shown.\n" "\n -x[format], --export[=format]\n" " export user data to the specified format. Events, appointments and\n" "\ttodos are converted and echoed to stdout.\n" "\tTwo possible formats are available: 'ical' and 'pcal'.\n" "\tIf the optional argument format is not given, ical format is\n" "\tselected by default.\n" "\tnote: redirect standard output to export data to a file,\n" "\tby issuing a command such as: calcurse --export > calcurse.dat\n"); fprintf(stdout, _("Calcurse %s - text-based organizer\n"), VERSION); usage(); fputs(htext, stdout); more_info(); } /* * Used to display the status of running instances of calcurse. * The displayed message will look like one of the following ones: * * calcurse is running (pid #) * calcurse is running in background (pid #) * calcurse is not running * * The status is obtained by looking at pid files in user data directory * (.calcurse.pid and .daemon.pid). */ static void status_arg(void) { int cpid, dpid; cpid = io_get_pid(path_cpid); dpid = io_get_pid(path_dpid); EXIT_IF(cpid && dpid, _("Error: both calcurse (pid: %d) and its daemon (pid: %d)\n" "seem to be running at the same time!\n" "Please check manually and restart calcurse.\n"), cpid, dpid); if (cpid) fprintf(stdout, _("calcurse is running (pid %d)\n"), cpid); else if (dpid) fprintf(stdout, _("calcurse is running in background (pid %d)\n"), dpid); else puts(_("calcurse is not running\n")); } /* Print TODO list and return the number of printed items. */ static int todo_arg(const char *format, int *limit, struct item_filter *filter) { const char *titlestr = filter->completed ? _("completed tasks:\n") : _("to do:\n"); int title = 1; int n = 0; llist_item_t *i; LLIST_FOREACH(&todolist, i) { if (*limit == 0) break; struct todo *todo = LLIST_TS_GET_DATA(i); if (title) { fputs(titlestr, stdout); title = 0; } print_todo(format, todo); n++; (*limit)--; } return n; } /* Print the next appointment within the upcoming 24 hours. */ static void next_arg(void) { struct notify_app next_app; const long current_time = now(); int time_left, hours_left, min_left; next_app.time = date_sec_change(current_time, 0, 1); next_app.got_app = 0; next_app.txt = NULL; next_app = *recur_apoint_check_next(&next_app, current_time, get_today()); next_app = *apoint_check_next(&next_app, current_time); if (next_app.got_app) { time_left = next_app.time - current_time; hours_left = (time_left / HOURINSEC); min_left = (time_left - hours_left * HOURINSEC) / MININSEC; fputs(_("next appointment:\n"), stdout); fprintf(stdout, " [%02d:%02d] %s\n", hours_left, min_left, next_app.txt); mem_free(next_app.txt); } } /* * Print the date on stdout. */ static void arg_print_date(long date) { char date_str[BUFSIZ]; struct tm lt; localtime_r((time_t *) & date, <); strftime(date_str, BUFSIZ, conf.output_datefmt, <); fputs(date_str, stdout); fputs(":\n", stdout); } /* * Print appointments inside the given query range. * If no start day is given (-1), today is considered. * If no end date is given (-1), a range of 1 day is considered. */ static void date_arg_from_to(long from, long to, int add_line, const char *fmt_apt, const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev, int *limit) { long date; for (date = from; date < to; date = date_sec_change(date, 0, 1)) { day_store_items(date, 0); if (day_item_count(0) == 0) continue; if (add_line) fputs("\n", stdout); arg_print_date(date); day_write_stdout(date, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, limit); add_line = 1; } } static long parse_datearg(const char *str) { struct date day; if (parse_date(str, DATEFMT_YYYYMMDD, (int *)&day.yyyy, (int *)&day.mm, (int *)&day.dd, NULL)) return date2sec(day, 0, 0); if (parse_date(str, DATEFMT_MMDDYYYY, (int *)&day.yyyy, (int *)&day.mm, (int *)&day.dd, NULL)) return date2sec(day, 0, 0); if (parse_date(str, DATEFMT_ISO, (int *)&day.yyyy, (int *)&day.mm, (int *)&day.dd, NULL)) return date2sec(day, 0, 0); return LONG_MAX; } static long parse_datetimearg(const char *str) { char *date = mem_strdup(str); char *time; unsigned hour, min; long ret; time = strchr(date, ' '); if (time) { /* Date and time. */ *time = '\0'; time++; if (!parse_time(time, &hour, &min)) return -1; ret = parse_datearg(date); if (ret == LONG_MAX) return -1; ret += hour * HOURINSEC + min * MININSEC; return ret; } ret = parse_datearg(date); if (ret == LONG_MAX) { /* No date specified, use time only. */ if (!parse_time(date, &hour, &min)) return -1; return get_today() + hour * HOURINSEC + min * MININSEC; } return ret; } static int parse_daterange(const char *str, long *date_from, long *date_to) { int ret = 0; char *s = xstrdup(str); char *p = strchr(s, ','); if (!p) goto cleanup; *p = '\0'; p++; if (*s != '\0') { *date_from = parse_datetimearg(s); if (*date_from == -1) goto cleanup; } else { *date_from = -1; } if (*p != '\0') { *date_to = parse_datetimearg(p); if (*date_to == -1) goto cleanup; } else { *date_to = -1; } ret = 1; cleanup: free(s); return ret; } static int parse_type_mask(const char *str) { char *buf = mem_strdup(str), *p; int mask = 0; for (p = strtok(buf, ","); p; p = strtok(NULL, ",")) { if (!strcmp(p, "event")) { mask |= TYPE_MASK_EVNT; } else if (!strcmp(p, "apt")) { mask |= TYPE_MASK_APPT; } else if (!strcmp(p, "recur-event")) { mask |= TYPE_MASK_RECUR_EVNT; } else if (!strcmp(p, "recur-apt")) { mask |= TYPE_MASK_RECUR_APPT; } else if (!strcmp(p, "recur")) { mask |= TYPE_MASK_RECUR; } else if (!strcmp(p, "cal")) { mask |= TYPE_MASK_CAL; } else if (!strcmp(p, "todo")) { mask |= TYPE_MASK_TODO; } else { mask = 0; goto cleanup; } } cleanup: mem_free(buf); return mask; } /* * Parse the command-line arguments and call the appropriate * routines to handle those arguments. Also initialize the data paths. */ int parse_args(int argc, char **argv) { /* Command-line flags */ int grep = 0, query = 0, next = 0; int status = 0, gc = 0, import = 0, export = 0; /* Query ranges */ long from = -1, range = -1, to = -1; int limit = INT_MAX; /* Filters */ struct item_filter filter = { 0, NULL, -1, -1, -1, -1, 0, 0, 0 }; /* Format strings */ const char *fmt_apt = " - %S -> %E\n\t%m\n"; const char *fmt_rapt = " - %S -> %E\n\t%m\n"; const char *fmt_ev = " * %m\n"; const char *fmt_rev = " * %m\n"; const char *fmt_todo = "%p. %m\n"; /* Import and export parameters */ int xfmt = IO_EXPORT_ICAL; /* Data file locations */ const char *cfile = NULL, *datadir = NULL, *ifile = NULL; int non_interactive = 1; int ch; regex_t reg; static const char *optstr = "gGhvnNax::t::d:c:r::s::S:D:i:l:Q"; struct option longopts[] = { {"appointment", no_argument, NULL, 'a'}, {"calendar", required_argument, NULL, 'c'}, {"day", required_argument, NULL, 'd'}, {"directory", required_argument, NULL, 'D'}, {"gc", no_argument, NULL, 'g'}, {"grep", no_argument, NULL, 'G'}, {"help", no_argument, NULL, 'h'}, {"import", required_argument, NULL, 'i'}, {"limit", required_argument, NULL, 'l'}, {"next", no_argument, NULL, 'n'}, {"note", no_argument, NULL, 'N'}, {"range", optional_argument, NULL, 'r'}, {"startday", optional_argument, NULL, 's'}, {"search", required_argument, NULL, 'S'}, {"todo", optional_argument, NULL, 't'}, {"version", no_argument, NULL, 'v'}, {"export", optional_argument, NULL, 'x'}, {"query", optional_argument, NULL, 'Q'}, {"filter-type", required_argument, NULL, OPT_FILTER_TYPE}, {"filter-pattern", required_argument, NULL, OPT_FILTER_PATTERN}, {"filter-start-from", required_argument, NULL, OPT_FILTER_START_FROM}, {"filter-start-to", required_argument, NULL, OPT_FILTER_START_TO}, {"filter-start-after", required_argument, NULL, OPT_FILTER_START_AFTER}, {"filter-start-before", required_argument, NULL, OPT_FILTER_START_BEFORE}, {"filter-start-range", required_argument, NULL, OPT_FILTER_START_RANGE}, {"filter-end-from", required_argument, NULL, OPT_FILTER_END_FROM}, {"filter-end-to", required_argument, NULL, OPT_FILTER_END_TO}, {"filter-end-after", required_argument, NULL, OPT_FILTER_END_AFTER}, {"filter-end-before", required_argument, NULL, OPT_FILTER_END_BEFORE}, {"filter-end-range", required_argument, NULL, OPT_FILTER_END_RANGE}, {"filter-priority", required_argument, NULL, OPT_FILTER_PRIORITY}, {"filter-completed", no_argument, NULL, OPT_FILTER_COMPLETED}, {"filter-uncompleted", no_argument, NULL, OPT_FILTER_UNCOMPLETED}, {"from", required_argument, NULL, OPT_FROM}, {"to", required_argument, NULL, OPT_TO}, {"days", required_argument, NULL, OPT_DAYS}, {"format-apt", required_argument, NULL, OPT_FMT_APT}, {"format-recur-apt", required_argument, NULL, OPT_FMT_RAPT}, {"format-event", required_argument, NULL, OPT_FMT_EV}, {"format-recur-event", required_argument, NULL, OPT_FMT_REV}, {"format-todo", required_argument, NULL, OPT_FMT_TODO}, {"read-only", no_argument, NULL, OPT_READ_ONLY}, {"status", no_argument, NULL, OPT_STATUS}, {NULL, no_argument, NULL, 0} }; while ((ch = getopt_long(argc, argv, optstr, longopts, NULL)) != -1) { switch (ch) { case 'a': filter.type_mask |= TYPE_MASK_CAL; query = 1; break; case 'c': cfile = optarg; break; case 'd': if (is_all_digit(optarg)) { range = atoi(optarg); } else { from = parse_datetimearg(optarg); EXIT_IF(from == -1, _("invalid date: %s"), optarg); } filter.type_mask |= TYPE_MASK_CAL; query = 1; break; case 'D': datadir = optarg; break; case 'h': help_arg(); goto cleanup; case 'g': gc = 1; break; case 'G': grep = 1; break; case 'i': import = 1; ifile = optarg; break; case 'l': limit = atoi(optarg); break; case 'n': next = 1; break; case 'r': if (optarg) range = atoi(optarg); else range = 1; EXIT_IF(range == 0, _("invalid range: %s"), optarg); filter.type_mask |= TYPE_MASK_CAL; query = 1; break; case 's': from = parse_datetimearg(optarg); EXIT_IF(from == -1, _("invalid date: %s"), optarg); filter.type_mask |= TYPE_MASK_CAL; query = 1; break; case 't': if (optarg) { EXIT_IF(!is_all_digit(optarg), _("invalid priority: %s"), optarg); filter.priority = atoi(optarg); if (filter.priority == 0) filter.completed = 1; EXIT_IF(filter.priority > 9, _("invalid priority: %s"), optarg); } else { filter.uncompleted = 1; } filter.type_mask |= TYPE_MASK_TODO; query = 1; break; case 'v': version_arg(); goto cleanup; case 'x': export = 1; if (optarg) { if (!strcmp(optarg, "ical")) xfmt = IO_EXPORT_ICAL; else if (!strcmp(optarg, "pcal")) xfmt = IO_EXPORT_PCAL; else EXIT(_("invalid export format: %s"), optarg); } break; case 'Q': query = 1; break; case OPT_FILTER_TYPE: filter.type_mask = parse_type_mask(optarg); EXIT_IF(filter.type_mask == 0, _("invalid filter mask")); break; case 'S': case OPT_FILTER_PATTERN: EXIT_IF(filter.regex, _("cannot handle more than one regular expression")); if (regcomp(®, optarg, REG_EXTENDED)) EXIT(_("could not compile regular expression: %s"), optarg); filter.regex = ® break; case OPT_FILTER_START_FROM: filter.start_from = parse_datetimearg(optarg); EXIT_IF(filter.start_from == -1, _("invalid date: %s"), optarg); break; case OPT_FILTER_START_TO: filter.start_to = parse_datetimearg(optarg); EXIT_IF(filter.start_to == -1, _("invalid date: %s"), optarg); break; case OPT_FILTER_START_AFTER: filter.start_from = parse_datetimearg(optarg) + 1; EXIT_IF(filter.start_from == -1, _("invalid date: %s"), optarg); break; case OPT_FILTER_START_BEFORE: filter.start_to = parse_datetimearg(optarg) - 1; EXIT_IF(filter.start_to == -1, _("invalid date: %s"), optarg); break; case OPT_FILTER_START_RANGE: EXIT_IF(!parse_daterange(optarg, &filter.start_from, &filter.start_to), _("invalid date range: %s"), optarg); break; case OPT_FILTER_END_FROM: filter.end_from = parse_datetimearg(optarg); EXIT_IF(filter.end_from == -1, _("invalid date: %s"), optarg); break; case OPT_FILTER_END_TO: filter.end_to = parse_datetimearg(optarg); EXIT_IF(filter.end_to == -1, _("invalid date: %s"), optarg); break; case OPT_FILTER_END_AFTER: filter.end_from = parse_datetimearg(optarg) + 1; EXIT_IF(filter.end_from == -1, _("invalid date: %s"), optarg); break; case OPT_FILTER_END_BEFORE: filter.end_to = parse_datetimearg(optarg) - 1; EXIT_IF(filter.end_to == -1, _("invalid date: %s"), optarg); break; case OPT_FILTER_END_RANGE: EXIT_IF(!parse_daterange(optarg, &filter.end_from, &filter.end_to), _("invalid date range: %s"), optarg); break; case OPT_FILTER_PRIORITY: filter.priority = atoi(optarg); EXIT_IF(filter.priority < 1 || filter.priority > 9, _("invalid priority: %s"), optarg); break; case OPT_FILTER_COMPLETED: filter.completed = 1; break; case OPT_FILTER_UNCOMPLETED: filter.uncompleted = 1; break; case OPT_FROM: from = parse_datetimearg(optarg); EXIT_IF(from == -1, _("invalid date: %s"), optarg); break; case OPT_TO: to = parse_datetimearg(optarg); EXIT_IF(to == -1, _("invalid date: %s"), optarg); break; case OPT_DAYS: range = atoi(optarg); EXIT_IF(range == 0, _("invalid range: %s"), optarg); break; case OPT_FMT_APT: fmt_apt = optarg; break; case OPT_FMT_RAPT: fmt_rapt = optarg; break; case OPT_FMT_EV: fmt_ev = optarg; break; case OPT_FMT_REV: fmt_rev = optarg; break; case OPT_FMT_TODO: fmt_todo = optarg; break; case OPT_READ_ONLY: read_only = 1; break; case OPT_STATUS: status = 1; break; default: usage(); usage_try(); goto cleanup; } } argc -= optind; if (filter.type_mask == 0) filter.type_mask = TYPE_MASK_ALL; if (status + grep + query + next + gc + import + export > 1) { ERROR_MSG(_("invalid argument combination")); usage(); usage_try(); goto cleanup; } if (from == -1) { struct date day = { 0, 0, 0 }; from = get_sec_date(day); } if (to == -1 && range == -1) to = date_sec_change(from, 0, 1); else if (to == -1 && range >= 0) to = date_sec_change(from, 0, range); else if (to >= 0 && range >= 0) EXIT_IF(to >= 0, _("cannot specify a range and an end date")); io_init(cfile, datadir); io_check_dir(path_dir); io_check_dir(path_notes); if (status) { status_arg(); } else if (grep) { io_check_file(path_apts); io_check_file(path_todo); io_check_file(path_conf); vars_init(); config_load(); /* To get output date format. */ io_load_data(&filter); io_save_todo(NULL); io_save_apts(NULL); } else if (query) { io_check_file(path_apts); io_check_file(path_todo); io_check_file(path_conf); vars_init(); config_load(); /* To get output date format. */ io_load_data(&filter); int add_line = todo_arg(fmt_todo, &limit, &filter); date_arg_from_to(from, to, add_line, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, &limit); } else if (next) { io_check_file(path_apts); io_load_app(&filter); next_arg(); } else if (gc) { io_check_file(path_apts); io_check_file(path_todo); io_load_data(NULL); note_gc(); } else if (import) { io_check_file(path_apts); io_check_file(path_todo); /* Get default pager in case we need to show a log file. */ vars_init(); io_load_data(NULL); io_import_data(IO_IMPORT_ICAL, ifile); io_save_apts(path_apts); io_save_todo(path_todo); } else if (export) { io_check_file(path_apts); io_check_file(path_todo); io_load_data(&filter); io_export_data(xfmt); } else { /* interactive mode */ non_interactive = 0; } cleanup: /* Free filter parameters. */ if (filter.regex) regfree(filter.regex); return non_interactive; } calcurse-4.0.0/src/help.c0000644000175000017500000001355312472326722012136 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include "calcurse.h" static int find_basedir(const char *locale_info[], unsigned n, char **basedir) { int i; char *locale = NULL; int ret = 0; for (i = 0; i < n; i++) { if (!locale_info[i]) continue; locale = strdup(locale_info[i]); asprintf(basedir, "%s/%s", DOCDIR, locale); if (io_dir_exists(*basedir)) { ret = 1; goto cleanup; } strtok(locale, ".@"); mem_free(*basedir); asprintf(basedir, "%s/%s", DOCDIR, locale); if (io_dir_exists(*basedir)) { ret = 1; goto cleanup; } strtok(locale, "_"); mem_free(*basedir); asprintf(basedir, "%s/%s", DOCDIR, locale); if (io_dir_exists(*basedir)) { ret = 1; goto cleanup; } mem_free(*basedir); *basedir = NULL; mem_free(locale); locale = NULL; } cleanup: if (locale) free(locale); return ret; } int display_help(const char *topic) { const char *locale_info[] = { getenv("LANGUAGE"), getenv("LC_ALL"), getenv("LC_MESSAGE"), getenv("LANG") }; char *basedir; char *path; int ret = 0; if (!topic) topic = "intro"; if (!find_basedir(locale_info, ARRAY_SIZE(locale_info), &basedir)) asprintf(&basedir, "%s", DOCDIR); asprintf(&path, "%s/%s.txt", basedir, topic); if (!io_file_exists(path) && keys_str2int(topic) > 0 && keys_get_action(keys_str2int(topic)) > 0) { int ch = keys_str2int(topic); enum key action = keys_get_action(ch); topic = keys_get_label(action); mem_free(path); asprintf(&path, "%s/%s.txt", basedir, topic); } if (!io_file_exists(path)) { if (!strcmp(topic, "generic-credits")) topic = "credits"; else if (!strcmp(topic, "generic-help")) topic = "intro"; else if (!strcmp(topic, "generic-save")) topic = "save"; else if (!strcmp(topic, "generic-reload")) topic = "reload"; else if (!strcmp(topic, "generic-copy")) topic = "copy_paste"; else if (!strcmp(topic, "generic-paste")) topic = "copy_paste"; else if (!strcmp(topic, "generic-change-view")) topic = "tab"; else if (!strcmp(topic, "generic-import")) topic = "import"; else if (!strcmp(topic, "generic-export")) topic = "export"; else if (!strcmp(topic, "generic-goto")) topic = "goto"; else if (!strcmp(topic, "generic-other-cmd")) topic = "other"; else if (!strcmp(topic, "generic-config-menu")) topic = "config"; else if (!strcmp(topic, "generic-add-appt")) topic = "general"; else if (!strcmp(topic, "generic-add-todo")) topic = "general"; else if (!strcmp(topic, "generic-prev-day")) topic = "general"; else if (!strcmp(topic, "generic-next-day")) topic = "general"; else if (!strcmp(topic, "generic-prev-week")) topic = "general"; else if (!strcmp(topic, "generic-next-week")) topic = "general"; else if (!strcmp(topic, "generic-prev-month")) topic = "general"; else if (!strcmp(topic, "generic-next-month")) topic = "general"; else if (!strcmp(topic, "generic-prev-year")) topic = "general"; else if (!strcmp(topic, "generic-next-year")) topic = "general"; else if (!strcmp(topic, "generic-goto-today")) topic = "general"; else if (!strcmp(topic, "move-right")) topic = "displacement"; else if (!strcmp(topic, "move-left")) topic = "displacement"; else if (!strcmp(topic, "move-down")) topic = "displacement"; else if (!strcmp(topic, "move-up")) topic = "displacement"; else if (!strcmp(topic, "start-of-week")) topic = "displacement"; else if (!strcmp(topic, "end-of-week")) topic = "displacement"; else if (!strcmp(topic, "add-item")) topic = "add"; else if (!strcmp(topic, "del-item")) topic = "delete"; else if (!strcmp(topic, "edit-item")) topic = "edit"; else if (!strcmp(topic, "view-item")) topic = "view"; else if (!strcmp(topic, "pipe-item")) topic = "pipe"; else if (!strcmp(topic, "flag-item")) topic = "flag"; else if (!strcmp(topic, "repeat")) topic = "repeat"; else if (!strcmp(topic, "edit-note")) topic = "enote"; else if (!strcmp(topic, "view-note")) topic = "vnote"; else if (!strcmp(topic, "raise-priority")) topic = "priority"; else if (!strcmp(topic, "lower-priority")) topic = "priority"; mem_free(path); asprintf(&path, "%s/%s.txt", basedir, topic); } if (io_file_exists(path)) { const char *arg[] = { conf.pager, path, NULL }; wins_launch_external(arg); ret = 1; } mem_free(basedir); mem_free(path); return ret; } calcurse-4.0.0/src/sha1.c0000644000175000017500000001624112472326722012037 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * * This code is based on Steve Reid's public domain SHA1 implementation. * * The original version is available at: * ftp://ftp.funet.fi/pub/crypt/hash/sha/sha1.c * */ #include #include #include #include "sha1.h" #define rol(val, n) (((val) << (n)) | ((val) >> (32 - (n)))) #ifdef WORDS_BIGENDIAN #define blk0(i) block->l[i] #else #define blk0(i) (block->l[i] = (rol (block->l[i], 24) & \ (uint32_t)0xFF00FF00) | (rol (block->l[i], 8) & (uint32_t)0x00FF00FF)) #endif #define blk(i) (block->l[i & 15] = rol (block->l[(i + 13) & 15] ^ \ block->l[(i + 8) & 15] ^ block->l[(i + 2) & 15] ^ block->l[i & 15], 1)) #define R0(v, w, x, y, z, i) z += ((w & (x ^ y)) ^ y) + blk0 (i) + \ 0x5A827999 + rol (v, 5); w = rol (w, 30); #define R1(v, w, x, y, z, i) z += ((w & (x ^ y)) ^ y) + blk (i) + \ 0x5A827999 + rol (v, 5); w = rol (w, 30); #define R2(v, w, x, y, z, i) z += (w ^ x ^ y) + blk (i) + 0x6ED9EBA1 + \ rol (v, 5); w = rol(w, 30); #define R3(v, w, x, y, z, i) z += (((w | x) & y) | (w & x)) + blk (i) + \ 0x8F1BBCDC + rol (v, 5); w = rol (w, 30); #define R4(v, w, x, y, z, i) z += (w ^ x ^ y) + blk (i) + 0xCA62C1D6 + \ rol (v, 5); w = rol (w, 30); static void sha1_transform(uint32_t state[5], const uint8_t buffer[64]) { typedef union { uint8_t c[64]; uint32_t l[16]; } b64_t; b64_t *block = (b64_t *) buffer; uint32_t a = state[0]; uint32_t b = state[1]; uint32_t c = state[2]; uint32_t d = state[3]; uint32_t e = state[4]; R0(a, b, c, d, e, 0); R0(e, a, b, c, d, 1); R0(d, e, a, b, c, 2); R0(c, d, e, a, b, 3); R0(b, c, d, e, a, 4); R0(a, b, c, d, e, 5); R0(e, a, b, c, d, 6); R0(d, e, a, b, c, 7); R0(c, d, e, a, b, 8); R0(b, c, d, e, a, 9); R0(a, b, c, d, e, 10); R0(e, a, b, c, d, 11); R0(d, e, a, b, c, 12); R0(c, d, e, a, b, 13); R0(b, c, d, e, a, 14); R0(a, b, c, d, e, 15); R1(e, a, b, c, d, 16); R1(d, e, a, b, c, 17); R1(c, d, e, a, b, 18); R1(b, c, d, e, a, 19); R2(a, b, c, d, e, 20); R2(e, a, b, c, d, 21); R2(d, e, a, b, c, 22); R2(c, d, e, a, b, 23); R2(b, c, d, e, a, 24); R2(a, b, c, d, e, 25); R2(e, a, b, c, d, 26); R2(d, e, a, b, c, 27); R2(c, d, e, a, b, 28); R2(b, c, d, e, a, 29); R2(a, b, c, d, e, 30); R2(e, a, b, c, d, 31); R2(d, e, a, b, c, 32); R2(c, d, e, a, b, 33); R2(b, c, d, e, a, 34); R2(a, b, c, d, e, 35); R2(e, a, b, c, d, 36); R2(d, e, a, b, c, 37); R2(c, d, e, a, b, 38); R2(b, c, d, e, a, 39); R3(a, b, c, d, e, 40); R3(e, a, b, c, d, 41); R3(d, e, a, b, c, 42); R3(c, d, e, a, b, 43); R3(b, c, d, e, a, 44); R3(a, b, c, d, e, 45); R3(e, a, b, c, d, 46); R3(d, e, a, b, c, 47); R3(c, d, e, a, b, 48); R3(b, c, d, e, a, 49); R3(a, b, c, d, e, 50); R3(e, a, b, c, d, 51); R3(d, e, a, b, c, 52); R3(c, d, e, a, b, 53); R3(b, c, d, e, a, 54); R3(a, b, c, d, e, 55); R3(e, a, b, c, d, 56); R3(d, e, a, b, c, 57); R3(c, d, e, a, b, 58); R3(b, c, d, e, a, 59); R4(a, b, c, d, e, 60); R4(e, a, b, c, d, 61); R4(d, e, a, b, c, 62); R4(c, d, e, a, b, 63); R4(b, c, d, e, a, 64); R4(a, b, c, d, e, 65); R4(e, a, b, c, d, 66); R4(d, e, a, b, c, 67); R4(c, d, e, a, b, 68); R4(b, c, d, e, a, 69); R4(a, b, c, d, e, 70); R4(e, a, b, c, d, 71); R4(d, e, a, b, c, 72); R4(c, d, e, a, b, 73); R4(b, c, d, e, a, 74); R4(a, b, c, d, e, 75); R4(e, a, b, c, d, 76); R4(d, e, a, b, c, 77); R4(c, d, e, a, b, 78); R4(b, c, d, e, a, 79); state[0] += a; state[1] += b; state[2] += c; state[3] += d; state[4] += e; a = b = c = d = e = 0; } void sha1_init(sha1_ctx_t * ctx) { ctx->state[0] = 0x67452301; ctx->state[1] = 0xEFCDAB89; ctx->state[2] = 0x98BADCFE; ctx->state[3] = 0x10325476; ctx->state[4] = 0xC3D2E1F0; ctx->count[0] = ctx->count[1] = 0; } void sha1_update(sha1_ctx_t * ctx, const uint8_t * data, unsigned int len) { unsigned int i, j; j = (ctx->count[0] >> 3) & 63; if ((ctx->count[0] += len << 3) < (len << 3)) ctx->count[1]++; ctx->count[1] += (len >> 29); if (j + len > 63) { memcpy(&ctx->buffer[j], data, (i = 64 - j)); sha1_transform(ctx->state, ctx->buffer); for (; i + 63 < len; i += 64) sha1_transform(ctx->state, &data[i]); j = 0; } else { i = 0; } memcpy(&ctx->buffer[j], &data[i], len - i); } void sha1_final(sha1_ctx_t * ctx, uint8_t digest[SHA1_DIGESTLEN]) { uint32_t i, j; uint8_t finalcount[8]; for (i = 0; i < 8; i++) { finalcount[i] = (uint8_t) ((ctx->count[(i >= 4 ? 0 : 1)] >> ((3 - (i & 3)) * 8)) & 255); } sha1_update(ctx, (uint8_t *) "\200", 1); while ((ctx->count[0] & 504) != 448) sha1_update(ctx, (uint8_t *) "\0", 1); sha1_update(ctx, finalcount, 8); for (i = 0; i < SHA1_DIGESTLEN; i++) digest[i] = (uint8_t) ((ctx-> state[i >> 2] >> ((3 - (i & 3)) * 8)) & 255); i = j = 0; memset(ctx->buffer, 0, SHA1_BLOCKLEN); memset(ctx->state, 0, SHA1_DIGESTLEN); memset(ctx->count, 0, 8); memset(&finalcount, 0, 8); } void sha1_digest(const char *data, char *buffer) { char *buf = strdup(data); sha1_ctx_t ctx; uint8_t digest[SHA1_DIGESTLEN]; int i; sha1_init(&ctx); sha1_update(&ctx, (const uint8_t *)buf, strlen(buf)); sha1_final(&ctx, (uint8_t *) digest); for (i = 0; i < SHA1_DIGESTLEN; i++) { snprintf(buffer, 3, "%02x", digest[i]); buffer += sizeof(char) * 2; } free(buf); } void sha1_stream(FILE * fp, char *buffer) { sha1_ctx_t ctx; uint8_t data[BUFSIZ]; size_t bytes_read; uint8_t digest[SHA1_DIGESTLEN]; int i; sha1_init(&ctx); while (!feof(fp)) { bytes_read = fread(data, 1, BUFSIZ, fp); sha1_update(&ctx, data, bytes_read); } sha1_final(&ctx, (uint8_t *) digest); for (i = 0; i < SHA1_DIGESTLEN; i++) { snprintf(buffer, 3, "%02x", digest[i]); buffer += sizeof(char) * 2; } } calcurse-4.0.0/src/listbox.c0000644000175000017500000001243712472326722012672 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include "calcurse.h" void listbox_init(struct listbox *lb, int y, int x, int h, int w, const char *label, listbox_fn_item_type_t fn_type, listbox_fn_item_height_t fn_height, listbox_fn_draw_item_t fn_draw) { EXIT_IF(lb == NULL, "null pointer"); wins_scrollwin_init(&(lb->sw), y, x, h, w, label); lb->item_count = lb->item_sel = 0; lb->fn_type = fn_type; lb->type = NULL; lb->fn_height = fn_height; lb->ch = NULL; lb->fn_draw = fn_draw; lb->cb_data = NULL; } void listbox_delete(struct listbox *lb) { EXIT_IF(lb == NULL, "null pointer"); wins_scrollwin_delete(&(lb->sw)); free(lb->type); free(lb->ch); } void listbox_resize(struct listbox *lb, int y, int x, int h, int w) { EXIT_IF(lb == NULL, "null pointer"); wins_scrollwin_resize(&(lb->sw), y, x, h, w); if (lb->item_sel < 0) return; unsigned last_line = lb->ch[lb->item_count] - 1; if (wins_scrollwin_is_visible(&(lb->sw), last_line)) wins_scrollwin_set_lower(&(lb->sw), last_line); wins_scrollwin_ensure_visible(&(lb->sw), lb->ch[lb->item_sel]); wins_scrollwin_ensure_visible(&(lb->sw), lb->ch[lb->item_sel + 1] - 1); } void listbox_set_cb_data(struct listbox *lb, void *cb_data) { lb->cb_data = cb_data; } static void listbox_fix_sel(struct listbox *, int); void listbox_load_items(struct listbox *lb, int item_count) { int i, ch; lb->item_count = item_count; if (item_count == 0) { lb->item_sel = -1; return; } free(lb->type); free(lb->ch); lb->type = mem_malloc(item_count * sizeof(unsigned)); lb->ch = mem_malloc((item_count + 1) * sizeof(unsigned)); for (i = 0, ch = 0; i < item_count; i++) { lb->type[i] = lb->fn_type(i, lb->cb_data); lb->ch[i] = ch; ch += lb->fn_height(i, lb->cb_data); } lb->ch[item_count] = ch; wins_scrollwin_set_linecount(&(lb->sw), ch); if (item_count > 0 && lb->item_sel < 0) lb->item_sel = 0; else if (lb->item_sel >= item_count) lb->item_sel = item_count - 1; listbox_fix_sel(lb, 1); } void listbox_draw_deco(struct listbox *lb, int hilt) { wins_scrollwin_draw_deco(&(lb->sw), hilt); } void listbox_display(struct listbox *lb) { int i; werase(lb->sw.inner); for (i = 0; i < lb->item_count; i++) { int is_sel = (i == lb->item_sel); lb->fn_draw(i, lb->sw.inner, lb->ch[i], is_sel, lb->cb_data); } wins_scrollwin_display(&(lb->sw)); } int listbox_get_sel(struct listbox *lb) { return lb->item_sel; } static void listbox_fix_sel(struct listbox *lb, int direction) { int did_flip = 0; if (lb->item_count == 0 || direction == 0) return; direction = direction > 0 ? 1 : -1; while (lb->type[lb->item_sel] != LISTBOX_ROW_TEXT) { if ((direction == -1 && lb->item_sel == 0) || (direction == 1 && lb->item_sel == lb->item_count - 1)) { if (did_flip) { lb->item_sel = -1; return; } direction = -direction; did_flip = 1; } else { lb->item_sel += direction; } } } static void listbox_fix_visible_region(struct listbox *lb) { int i; wins_scrollwin_ensure_visible(&(lb->sw), lb->ch[lb->item_sel]); wins_scrollwin_ensure_visible(&(lb->sw), lb->ch[lb->item_sel + 1] - 1); i = lb->item_sel - 1; while (i >= 0 && lb->type[i] != LISTBOX_ROW_TEXT) { wins_scrollwin_ensure_visible(&(lb->sw), lb->ch[i]); wins_scrollwin_ensure_visible(&(lb->sw), lb->ch[i + 1] - 1); i++; } } void listbox_set_sel(struct listbox *lb, unsigned pos) { lb->item_sel = pos; listbox_fix_sel(lb, 1); if (lb->item_sel < 0) return; listbox_fix_visible_region(lb); } void listbox_sel_move(struct listbox *lb, int delta) { if (lb->item_count == 0) return; lb->item_sel += delta; if (lb->item_sel < 0) lb->item_sel = 0; else if (lb->item_sel >= lb->item_count) lb->item_sel = lb->item_count - 1; listbox_fix_sel(lb, delta); if (lb->item_sel < 0) return; listbox_fix_visible_region(lb); } calcurse-4.0.0/src/dmon.c0000644000175000017500000001342212472326722012136 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include #include #include #include #include "calcurse.h" #define DMON_SLEEP_TIME 60 #define DMON_LOG(...) do { \ if (dmon.log) \ io_fprintln (path_dmon_log, __VA_ARGS__); \ } while (0) #define DMON_ABRT(...) do { \ DMON_LOG (__VA_ARGS__); \ if (kill (getpid (), SIGINT) < 0) \ { \ DMON_LOG (_("Could not stop daemon properly: %s\n"), \ strerror (errno)); \ exit (EXIT_FAILURE); \ } \ } while (0) static unsigned data_loaded; static void dmon_sigs_hdlr(int sig) { if (data_loaded) free_user_data(); DMON_LOG(_("terminated at %s with signal %d\n"), nowstr(), sig); if (unlink(path_dpid) != 0) { DMON_LOG(_("Could not remove daemon lock file: %s\n"), strerror(errno)); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); } static unsigned daemonize(int status) { int fd; /* * Operate in the background: Daemonizing. * * First need to fork in order to become a child of the init process, * once the father exits. */ switch (fork()) { case -1: /* fork error */ EXIT(_("Could not fork: %s\n"), strerror(errno)); break; case 0: /* child */ break; default: /* parent */ exit(status); } /* * Process independency. * * Obtain a new process group and session in order to get detached from the * controlling terminal. */ if (setsid() == -1) { DMON_LOG(_("Could not detach from the controlling terminal: %s\n"), strerror(errno)); return 0; } /* * Change working directory to root directory, * to prevent filesystem unmounts. */ if (chdir("/") == -1) { DMON_LOG(_("Could not change working directory: %s\n"), strerror(errno)); return 0; } /* Redirect standard file descriptors to /dev/null. */ if ((fd = open(_PATH_DEVNULL, O_RDWR, 0)) != -1) { dup2(fd, STDIN_FILENO); dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); if (fd > 2) close(fd); } /* Write access for the owner only. */ umask(0022); if (!sigs_set_hdlr(SIGINT, dmon_sigs_hdlr) || !sigs_set_hdlr(SIGTERM, dmon_sigs_hdlr) || !sigs_set_hdlr(SIGALRM, dmon_sigs_hdlr) || !sigs_set_hdlr(SIGQUIT, dmon_sigs_hdlr) || !sigs_set_hdlr(SIGCHLD, SIG_IGN)) return 0; return 1; } void dmon_start(int parent_exit_status) { if (!daemonize(parent_exit_status)) DMON_ABRT(_("Cannot daemonize, aborting\n")); if (!io_dump_pid(path_dpid)) DMON_ABRT(_("Could not set lock file\n")); if (!io_file_exists(path_conf)) DMON_ABRT(_("Could not access \"%s\": %s\n"), path_conf, strerror(errno)); config_load(); if (!io_file_exists(path_apts)) DMON_ABRT(_("Could not access \"%s\": %s\n"), path_apts, strerror(errno)); apoint_llist_init(); recur_apoint_llist_init(); event_llist_init(); recur_event_llist_init(); todo_init_list(); io_load_app(NULL); data_loaded = 1; DMON_LOG(_("started at %s\n"), nowstr()); for (;;) { int left; if (!notify_get_next_bkgd()) DMON_ABRT(_("error loading next appointment\n")); left = notify_time_left(); if (left > 0 && left < nbar.cntdwn && notify_needs_reminder()) { DMON_LOG(_("launching notification at %s for: \"%s\"\n"), nowstr(), notify_app_txt()); if (!notify_launch_cmd()) DMON_LOG(_("error while sending notification\n")); } DMON_LOG(ngettext("sleeping at %s for %d second\n", "sleeping at %s for %d seconds\n", DMON_SLEEP_TIME), nowstr(), DMON_SLEEP_TIME); psleep(DMON_SLEEP_TIME); DMON_LOG(_("awakened at %s\n"), nowstr()); } } /* * Check if calcurse is running in background, and if yes, send a SIGINT * signal to stop it. */ void dmon_stop(void) { int dpid; dpid = io_get_pid(path_dpid); if (!dpid) return; if (kill((pid_t) dpid, SIGINT) < 0 && errno != ESRCH) EXIT(_("Could not stop calcurse daemon: %s\n"), strerror(errno)); } calcurse-4.0.0/src/llist_ts.h0000644000175000017500000001015412472326722013042 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ /* Thread-safe linked lists. */ typedef struct llist_ts llist_ts_t; struct llist_ts { llist_item_t *head; llist_item_t *tail; pthread_mutex_t mutex; }; /* Initialization and deallocation. */ #define LLIST_TS_INIT(l_ts) do { \ llist_init ((llist_t *)l_ts); \ pthread_mutex_init (&(l_ts)->mutex, NULL); \ } while (0) #define LLIST_TS_FREE(l_ts) do { \ llist_free ((llist_t *)l_ts); \ pthread_mutex_destroy (&(l_ts)->mutex); \ } while (0) #define LLIST_TS_FREE_INNER(l_ts, fn_free) \ llist_free_inner ((llist_t *)l_ts, (llist_fn_free_t)fn_free) /* Thread-safety operations. */ #define LLIST_TS_LOCK(l_ts) pthread_mutex_lock (&(l_ts)->mutex) #define LLIST_TS_UNLOCK(l_ts) pthread_mutex_unlock (&(l_ts)->mutex) /* Retrieving list items. */ #define LLIST_TS_FIRST(l_ts) llist_first ((llist_t *)l_ts) #define LLIST_TS_NTH(l_ts, n) llist_nth ((llist_t *)l_ts, n) #define LLIST_TS_NEXT(i) llist_next (i) #define LLIST_TS_NEXT_FILTER(i, data, fn_match) \ llist_next_filter (i, data, (llist_fn_match_t)fn_match) #define LLIST_TS_FIND_FIRST(l_ts, data, fn_match) \ llist_find_first ((llist_t *)l_ts, data, (llist_fn_match_t)fn_match) #define LLIST_TS_FIND_NEXT(i, data, fn_match) \ llist_find_next (i, data, (llist_fn_match_t)fn_match) #define LLIST_TS_FIND_NTH(l_ts, n, data, fn_match) \ llist_find_nth ((llist_t *)l_ts, n, data, (llist_fn_match_t)fn_match) #define LLIST_TS_FOREACH(l_ts, i) \ for (i = LLIST_TS_FIRST (l_ts); i; i = LLIST_TS_NEXT (i)) #define LLIST_TS_FIND_FOREACH(l_ts, data, fn_match, i) \ for (i = LLIST_TS_FIND_FIRST (l_ts, data, fn_match); i; \ i = LLIST_TS_FIND_NEXT (i, data, fn_match)) #define LLIST_TS_FIND_FOREACH_CONT(l_ts, data, fn_match, i) \ for (i = LLIST_TS_FIND_FIRST (l_ts, data, fn_match); i; \ i = LLIST_TS_NEXT_FILTER (i, data, fn_match)) /* Accessing list item data. */ #define LLIST_TS_GET_DATA(i) llist_get_data (i) /* List manipulation. */ #define LLIST_TS_ADD(l_ts, data) llist_add ((llist_t *)l_ts, data) #define LLIST_TS_REMOVE(l_ts, i) llist_remove ((llist_t *)l_ts, i) #define LLIST_TS_ADD_SORTED(l_ts, data, fn_cmp) \ llist_add_sorted ((llist_t *)l_ts, data, (llist_fn_cmp_t)fn_cmp) calcurse-4.0.0/src/day.c0000644000175000017500000004176712472327511011770 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include #include "calcurse.h" static vector_t day_items; static unsigned day_items_nb = 0; static void day_free(struct day_item *day) { mem_free(day); } static void day_init_vector(void) { VECTOR_INIT(&day_items, 16); } /* * Free the current day vector containing the events and appointments. * Must not free associated message and note, because their are not dynamically * allocated (only pointers to real objects are stored in this structure). */ void day_free_vector(void) { VECTOR_FREE_INNER(&day_items, day_free); VECTOR_FREE(&day_items); } static int day_cmp_start(struct day_item **pa, struct day_item **pb) { struct day_item *a = *pa; struct day_item *b = *pb; if ((a->type == APPT || a->type == RECUR_APPT) && (b->type == APPT || b->type == RECUR_APPT)) { return a->start - b->start; } return a->type - b->type; } /* Add an item to the current day list. */ static void day_add_item(int type, long start, union aptev_ptr item) { struct day_item *day = mem_malloc(sizeof(struct day_item)); day->type = type; day->start = start; day->item = item; VECTOR_ADD(&day_items, day); } /* Get the message of an item. */ char *day_item_get_mesg(struct day_item *day) { switch (day->type) { case APPT: return day->item.apt->mesg; case EVNT: return day->item.ev->mesg; case RECUR_APPT: return day->item.rapt->mesg; case RECUR_EVNT: return day->item.rev->mesg; default: return NULL; } } /* Get the note attached to an item. */ char *day_item_get_note(struct day_item *day) { switch (day->type) { case APPT: return day->item.apt->note; case EVNT: return day->item.ev->note; case RECUR_APPT: return day->item.rapt->note; case RECUR_EVNT: return day->item.rev->note; default: return NULL; } } /* Get the note attached to an item. */ void day_item_erase_note(struct day_item *day) { switch (day->type) { case APPT: erase_note(&day->item.apt->note); break; case EVNT: erase_note(&day->item.ev->note); break; case RECUR_APPT: erase_note(&day->item.rapt->note); break; case RECUR_EVNT: erase_note(&day->item.rev->note); break; default: break; } } /* Get the duration of an item. */ long day_item_get_duration(struct day_item *day) { switch (day->type) { case APPT: return day->item.apt->dur; case RECUR_APPT: return day->item.rapt->dur; default: return 0; } } /* Get the notification state of an item. */ int day_item_get_state(struct day_item *day) { switch (day->type) { case APPT: return day->item.apt->state; case RECUR_APPT: return day->item.rapt->state; default: return APOINT_NULL; } } /* Add an exception to an item. */ void day_item_add_exc(struct day_item *day, long date) { switch (day->type) { case RECUR_EVNT: recur_event_add_exc(day->item.rev, date); break; case RECUR_APPT: recur_apoint_add_exc(day->item.rapt, date); break; default: break; } } /* Clone the actual item. */ void day_item_fork(struct day_item *day_in, struct day_item *day_out) { day_out->type = day_in->type; day_out->start = day_in->start; switch (day_in->type) { case APPT: day_out->item.apt = apoint_dup(day_in->item.apt); break; case EVNT: day_out->item.ev = event_dup(day_in->item.ev); break; case RECUR_APPT: day_out->item.rapt = recur_apoint_dup(day_in->item.rapt); break; case RECUR_EVNT: day_out->item.rev = recur_event_dup(day_in->item.rev); break; default: EXIT(_("unknown item type")); /* NOTREACHED */ } } /* * Store the events for the selected day in structure pointed * by day_items. This is done by copying the events * from the general structure pointed by eventlist to the structure * dedicated to the selected day. * Returns the number of events for the selected day. */ static int day_store_events(long date) { llist_item_t *i; union aptev_ptr p; int e_nb = 0; LLIST_FIND_FOREACH_CONT(&eventlist, &date, event_inday, i) { struct event *ev = LLIST_TS_GET_DATA(i); p.ev = ev; day_add_item(EVNT, ev->day, p); e_nb++; } return e_nb; } /* * Store the recurrent events for the selected day in structure pointed * by day_items. This is done by copying the recurrent events * from the general structure pointed by recur_elist to the structure * dedicated to the selected day. * Returns the number of recurrent events for the selected day. */ static int day_store_recur_events(long date) { llist_item_t *i; union aptev_ptr p; int e_nb = 0; LLIST_FIND_FOREACH(&recur_elist, &date, recur_event_inday, i) { struct recur_event *rev = LLIST_TS_GET_DATA(i); p.rev = rev; day_add_item(RECUR_EVNT, rev->day, p); e_nb++; } return e_nb; } /* * Store the apoints for the selected day in structure pointed * by day_items. This is done by copying the appointments * from the general structure pointed by alist_p to the * structure dedicated to the selected day. * Returns the number of appointments for the selected day. */ static int day_store_apoints(long date) { llist_item_t *i; union aptev_ptr p; int a_nb = 0; LLIST_TS_LOCK(&alist_p); LLIST_TS_FIND_FOREACH(&alist_p, &date, apoint_inday, i) { struct apoint *apt = LLIST_TS_GET_DATA(i); p.apt = apt; if (apt->start >= date + DAYINSEC) break; day_add_item(APPT, apt->start, p); a_nb++; } LLIST_TS_UNLOCK(&alist_p); return a_nb; } /* * Store the recurrent apoints for the selected day in structure pointed * by day_items. This is done by copying the appointments * from the general structure pointed by recur_alist_p to the * structure dedicated to the selected day. * Returns the number of recurrent appointments for the selected day. */ static int day_store_recur_apoints(long date) { llist_item_t *i; union aptev_ptr p; int a_nb = 0; LLIST_TS_LOCK(&recur_alist_p); LLIST_TS_FIND_FOREACH(&recur_alist_p, &date, recur_apoint_inday, i) { struct recur_apoint *rapt = LLIST_TS_GET_DATA(i); p.rapt = rapt; unsigned real_start; if (recur_apoint_find_occurrence(rapt, date, &real_start)) { day_add_item(RECUR_APPT, real_start, p); a_nb++; } } LLIST_TS_UNLOCK(&recur_alist_p); return a_nb; } /* * Store all of the items to be displayed for the selected day. * Items are of four types: recursive events, normal events, * recursive appointments and normal appointments. * The items are stored in the linked list pointed by day_items * and the length of the new pad to write is returned. * The number of events and appointments in the current day are also updated. */ void day_store_items(long date, int include_captions) { unsigned apts, events; union aptev_ptr p = { NULL }; day_free_vector(); day_init_vector(); if (include_captions) day_add_item(DAY_HEADING, 0, p); events = day_store_recur_events(date); events += day_store_events(date); apts = day_store_recur_apoints(date); apts += day_store_apoints(date); if (include_captions && events > 0 && apts > 0) day_add_item(DAY_SEPARATOR, 0, p); VECTOR_SORT(&day_items, day_cmp_start); day_items_nb = events + apts; } /* * Store the events and appointments for the selected day, and write * those items in a pad. If selected day is null, then store items for current * day. This is useful to speed up the appointment panel update. */ void day_process_storage(struct date *slctd_date, unsigned day_changed) { long date; struct date day; if (slctd_date) day = *slctd_date; else ui_calendar_store_current_date(&day); date = date2sec(day, 0, 0); /* Inits */ if (apad.length != 0) delwin(apad.ptrwin); /* Store the events and appointments (recursive and normal items). */ day_store_items(date, 1); } /* * Print an item date in the appointment panel. */ void day_display_item_date(struct day_item *day, WINDOW *win, int incolor, long date, int y, int x) { char a_st[100], a_end[100]; char ch_recur, ch_notify; /* FIXME: Redesign apoint_sec2str() and remove the need for a temporary * appointment item here. */ struct apoint apt_tmp; apt_tmp.start = day->start; apt_tmp.dur = day_item_get_duration(day); apoint_sec2str(&apt_tmp, date, a_st, a_end); if (incolor == 0) custom_apply_attr(win, ATTR_HIGHEST); ch_recur = (day->type == RECUR_EVNT || day->type == RECUR_APPT) ? '*' : '-'; ch_notify = (day_item_get_state(day) & APOINT_NOTIFY) ? '!' : ' '; mvwprintw(win, y, x, " %c%c%s", ch_recur, ch_notify, a_st); if (apt_tmp.dur) mvwprintw(win, y, x + 3 + strlen(a_st), " -> %s", a_end); if (incolor == 0) custom_remove_attr(win, ATTR_HIGHEST); } /* * Print an item description in the corresponding panel window. */ void day_display_item(struct day_item *day, WINDOW *win, int incolor, int width, int y, int x) { int ch_recur, ch_note; char buf[width * UTF8_MAXLEN]; int i; if (width <= 0) return; char *mesg = day_item_get_mesg(day); ch_recur = (day->type == RECUR_EVNT || day->type == RECUR_APPT) ? '*' : ' '; ch_note = day_item_get_note(day) ? '>' : ' '; if (incolor == 0) custom_apply_attr(win, ATTR_HIGHEST); if (utf8_strwidth(mesg) < width) { mvwprintw(win, y, x, " %c%c%s", ch_recur, ch_note, mesg); } else { for (i = 0; mesg[i] && width > 0; i++) { if (!UTF8_ISCONT(mesg[i])) width -= utf8_width(&mesg[i]); buf[i] = mesg[i]; } if (i) buf[i - 1] = 0; else buf[0] = 0; mvwprintw(win, y, x, " %c%c%s...", ch_recur, ch_note, buf); } if (incolor == 0) custom_remove_attr(win, ATTR_HIGHEST); } /* Write the appointments and events for the selected day to stdout. */ void day_write_stdout(long date, const char *fmt_apt, const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev, int *limit) { int i; VECTOR_FOREACH(&day_items, i) { if (*limit == 0) break; struct day_item *day = VECTOR_NTH(&day_items, i); switch (day->type) { case APPT: print_apoint(fmt_apt, date, day->item.apt); break; case EVNT: print_event(fmt_ev, date, day->item.ev); break; case RECUR_APPT: print_recur_apoint(fmt_rapt, date, day->start, day->item.rapt); break; case RECUR_EVNT: print_recur_event(fmt_rev, date, day->item.rev); break; default: EXIT(_("unknown item type")); /* NOTREACHED */ } (*limit)--; } } /* Display an item inside a popup window. */ void day_popup_item(struct day_item *day) { if (day->type == EVNT || day->type == RECUR_EVNT) { item_in_popup(NULL, NULL, day_item_get_mesg(day), _("Event:")); } else if (day->type == APPT || day->type == RECUR_APPT) { char a_st[100], a_end[100]; /* FIXME: Redesign apoint_sec2str() and remove the need for a temporary * appointment item here. */ struct apoint apt_tmp; apt_tmp.start = day->start; apt_tmp.dur = day_item_get_duration(day); apoint_sec2str(&apt_tmp, ui_calendar_get_slctd_day_sec(), a_st, a_end); item_in_popup(a_st, a_end, day_item_get_mesg(day), _("Appointment:")); } else { EXIT(_("unknown item type")); /* NOTREACHED */ } } /* * 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. */ int day_check_if_item(struct date day) { const long date = date2sec(day, 0, 0); if (LLIST_FIND_FIRST (&recur_elist, (long *)&date, recur_event_inday)) return 1; LLIST_TS_LOCK(&recur_alist_p); if (LLIST_TS_FIND_FIRST (&recur_alist_p, (long *)&date, recur_apoint_inday)) { LLIST_TS_UNLOCK(&recur_alist_p); return 1; } LLIST_TS_UNLOCK(&recur_alist_p); if (LLIST_FIND_FIRST(&eventlist, (long *)&date, event_inday)) return 1; LLIST_TS_LOCK(&alist_p); if (LLIST_TS_FIND_FIRST(&alist_p, (long *)&date, apoint_inday)) { LLIST_TS_UNLOCK(&alist_p); return 1; } LLIST_TS_UNLOCK(&alist_p); return 0; } static unsigned fill_slices(int *slices, int slicesno, int first, int last) { int i; if (first < 0 || last < first) return 0; if (last >= slicesno) last = slicesno - 1; /* Appointment spanning more than one day. */ for (i = first; i <= last; i++) slices[i] = 1; return 1; } /* * Fill in the 'slices' vector given as an argument with 1 if there is an * appointment in the corresponding time slice, 0 otherwise. * A 24 hours day is divided into 'slicesno' number of time slices. */ unsigned day_chk_busy_slices(struct date day, int slicesno, int *slices) { llist_item_t *i; int slicelen; const long date = date2sec(day, 0, 0); slicelen = DAYINSEC / slicesno; #define SLICENUM(tsec) ((tsec) / slicelen % slicesno) LLIST_TS_LOCK(&recur_alist_p); LLIST_TS_FIND_FOREACH(&recur_alist_p, (long *)&date, recur_apoint_inday, i) { struct apoint *rapt = LLIST_TS_GET_DATA(i); long start = get_item_time(rapt->start); long end = get_item_time(rapt->start + rapt->dur); if (rapt->start < date) start = 0; if (rapt->start + rapt->dur >= date + DAYINSEC) end = DAYINSEC - 1; if (!fill_slices (slices, slicesno, SLICENUM(start), SLICENUM(end))) { LLIST_TS_UNLOCK(&recur_alist_p); return 0; } } LLIST_TS_UNLOCK(&recur_alist_p); LLIST_TS_LOCK(&alist_p); LLIST_TS_FIND_FOREACH(&alist_p, (long *)&date, apoint_inday, i) { struct apoint *apt = LLIST_TS_GET_DATA(i); long start = get_item_time(apt->start); long end = get_item_time(apt->start + apt->dur); if (apt->start >= date + DAYINSEC) break; if (apt->start < date) start = 0; if (apt->start + apt->dur >= date + DAYINSEC) end = DAYINSEC - 1; if (!fill_slices (slices, slicesno, SLICENUM(start), SLICENUM(end))) { LLIST_TS_UNLOCK(&alist_p); return 0; } } LLIST_TS_UNLOCK(&alist_p); #undef SLICENUM return 1; } /* Cut an item so it can be pasted somewhere else later. */ struct day_item *day_cut_item(long date, int item_number) { struct day_item *p = day_get_item(item_number); switch (p->type) { case EVNT: event_delete(p->item.ev); break; case RECUR_EVNT: recur_event_erase(p->item.rev); break; case APPT: apoint_delete(p->item.apt); break; case RECUR_APPT: recur_apoint_erase(p->item.rapt); break; default: EXIT(_("unknown item type")); /* NOTREACHED */ } return p; } /* Paste a previously cut item. */ int day_paste_item(struct day_item *p, long date) { if (!p->type) { /* No previously cut item. */ return 0; } switch (p->type) { case EVNT: event_paste_item(p->item.ev, date); break; case RECUR_EVNT: recur_event_paste_item(p->item.rev, date); break; case APPT: apoint_paste_item(p->item.apt, date); break; case RECUR_APPT: recur_apoint_paste_item(p->item.rapt, date); break; default: EXIT(_("unknown item type")); /* NOTREACHED */ } return p->type; } /* Returns a structure containing the selected item. */ struct day_item *day_get_item(int item_number) { return VECTOR_NTH(&day_items, item_number); } unsigned day_item_count(int include_captions) { return (include_captions ? VECTOR_COUNT(&day_items) : day_items_nb); } /* Attach a note to an appointment or event. */ void day_edit_note(struct day_item *p, const char *editor) { char *note; note = day_item_get_note(p); edit_note(¬e, editor); switch (p->type) { case RECUR_EVNT: p->item.rev->note = note; break; case EVNT: p->item.ev->note = note; break; case RECUR_APPT: p->item.rapt->note = note; break; case APPT: p->item.apt->note = note; break; default: break; } } /* View a note previously attached to an appointment or event */ void day_view_note(struct day_item *p, const char *pager) { view_note(day_item_get_note(p), pager); } /* Switch notification state for an item. */ void day_item_switch_notify(struct day_item *p) { switch (p->type) { case RECUR_APPT: recur_apoint_switch_notify(p->item.rapt); break; case APPT: apoint_switch_notify(p->item.apt); break; default: break; } } calcurse-4.0.0/src/vector.h0000644000175000017500000000537112472326722012514 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include "calcurse.h" typedef struct vector vector_t; struct vector { unsigned count; unsigned size; void **data; }; typedef int (*vector_fn_cmp_t) (const void *, const void *); typedef void (*vector_fn_free_t) (void *); /* Initialization and deallocation. */ void vector_init(vector_t *, unsigned); void vector_free(vector_t *); void vector_free_inner(vector_t *, vector_fn_free_t); #define VECTOR_INIT(v, n) vector_init(v, n) #define VECTOR_FREE(v) vector_free(v) #define VECTOR_FREE_INNER(v, fn_free) \ vector_free_inner(v, (vector_fn_free_t)fn_free) /* Retrieving vector items. */ void *vector_first(vector_t *); void *vector_nth(vector_t *, int); unsigned vector_count(vector_t *); #define VECTOR_FIRST(v) vector_first(v) #define VECTOR_NTH(v, n) vector_nth(v, n) #define VECTOR_COUNT(v) vector_count(v) #define VECTOR_FOREACH(v, i) for (i = 0; i < VECTOR_COUNT(v); i++) /* Vector manipulation. */ void vector_add(vector_t *, void *); void vector_sort(vector_t *, vector_fn_cmp_t); void vector_remove(vector_t *, unsigned); #define VECTOR_ADD(v, data) vector_add(v, data) #define VECTOR_SORT(v, fn_cmp) vector_sort(v, (vector_fn_cmp_t)fn_cmp) #define VECTOR_REMOVE(v, i) vector_remove(v, i) calcurse-4.0.0/src/utils.c0000644000175000017500000010243612472330243012336 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include #include #include #include #include #include #include #include #include "calcurse.h" #define ISLEAP(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0) #define FS_EXT_MAXLEN 64 enum format_specifier { FS_STARTDATE, FS_DURATION, FS_ENDDATE, FS_REMAINING, FS_MESSAGE, FS_NOTE, FS_NOTEFILE, FS_PRIORITY, FS_PSIGN, FS_EOF, FS_UNKNOWN }; /* General routine to exit calcurse properly. */ void exit_calcurse(int status) { int was_interactive; if (ui_mode == UI_CURSES) { notify_stop_main_thread(); clear(); wins_refresh(); endwin(); ui_mode = UI_CMDLINE; was_interactive = 1; } else { 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"), strerror(errno)); if (dmon.enable) dmon_start(status); } exit(status); } void free_user_data(void) { unsigned i; day_free_vector(); event_llist_free(); apoint_llist_free(); recur_apoint_llist_free(); recur_event_llist_free(); for (i = 0; i <= 37; i++) ui_day_item_cut_free(i); todo_free_list(); notify_free_app(); } /* Function to exit on internal error. */ void fatalbox(const char *errmsg) { WINDOW *errwin; const char *label = _("/!\\ INTERNAL ERROR /!\\"); const char *reportmsg = _("Please report the following bug:"); const int WINROW = 10; const int WINCOL = col - 2; const int MSGLEN = WINCOL - 2; char msg[MSGLEN]; if (errmsg == NULL) return; strncpy(msg, errmsg, MSGLEN); errwin = newwin(WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2); custom_apply_attr(errwin, ATTR_HIGHEST); box(errwin, 0, 0); wins_show(errwin, label); mvwaddstr(errwin, 3, 1, reportmsg); mvwaddstr(errwin, 5, (WINCOL - strlen(msg)) / 2, msg); custom_remove_attr(errwin, ATTR_HIGHEST); wins_wrefresh(errwin); wgetch(errwin); delwin(errwin); wins_doupdate(); } void warnbox(const char *msg) { WINDOW *warnwin; const char *label = "/!\\"; const int WINROW = 10; const int WINCOL = col - 2; const int MSGLEN = WINCOL - 2; char displmsg[MSGLEN]; if (msg == NULL) return; strncpy(displmsg, msg, MSGLEN); warnwin = newwin(WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2); custom_apply_attr(warnwin, ATTR_HIGHEST); box(warnwin, 0, 0); wins_show(warnwin, label); mvwaddstr(warnwin, 5, (WINCOL - strlen(displmsg)) / 2, displmsg); custom_remove_attr(warnwin, ATTR_HIGHEST); wins_wrefresh(warnwin); wgetch(warnwin); delwin(warnwin); wins_doupdate(); } /* * Print a message in the status bar. * Message texts for first line and second line are to be provided. */ void status_mesg(const char *msg1, const char *msg2) { wins_erase_status_bar(); custom_apply_attr(win[STA].p, ATTR_HIGHEST); mvwaddstr(win[STA].p, 0, 0, msg1); mvwaddstr(win[STA].p, 1, 0, msg2); custom_remove_attr(win[STA].p, ATTR_HIGHEST); wins_wrefresh(win[STA].p); } /* * Prompts the user to make a choice between named alternatives. * * The available choices are described by a string of the form * "[ynp]". The first and last char are ignored (they are only here to * make the translators' life easier), and every other char indicates * a key the user is allowed to press. * * Returns the index of the key pressed by the user (starting from 1), * or -1 if the user doesn't want to answer (e.g. by escaping). */ int status_ask_choice(const char *message, const char choice[], int nb_choice) { int i, ch; char *tmp; /* "[4/2/f/t/w/.../Z] " */ char avail_choice[2 * nb_choice + 3]; avail_choice[0] = '['; avail_choice[1] = '\0'; for (i = 1; i <= nb_choice; i++) { asprintf(&tmp, (i == nb_choice) ? "%c] " : "%c/", choice[i]); strcat(avail_choice, tmp); mem_free(tmp); } status_mesg(message, avail_choice); for (;;) { ch = wgetch(win[KEY].p); for (i = 1; i <= nb_choice; i++) if (ch == choice[i]) return i; if (ch == ESCAPE) return (-1); if (resize) { resize = 0; wins_reset(); status_mesg(message, avail_choice); } } } /* * Prompts the user with a boolean question. * * Returns 1 if yes, 2 if no, and -1 otherwise */ int status_ask_bool(const char *msg) { return (status_ask_choice(msg, _("[yn]"), 2)); } /* * Prompts the user to make a choice between a number of alternatives. * * Returns the option chosen by the user (starting from 1), or -1 if * the user doesn't want to answer. */ int status_ask_simplechoice(const char *prefix, const char *choice[], int nb_choice) { int i; char *tmp; /* "(1) Choice1, (2) Choice2, (3) Choice3?" */ char choicestr[BUFSIZ]; /* Holds the characters to choose from ('1', '2', etc) */ char char_choice[nb_choice + 2]; /* No need to initialize first and last char. */ for (i = 1; i <= nb_choice; i++) char_choice[i] = '0' + i; strcpy(choicestr, prefix); for (i = 0; i < nb_choice; i++) { asprintf(&tmp, ((i + 1) == nb_choice) ? "(%d) %s?" : "(%d) %s, ", (i + 1), choice[i]); strcat(choicestr, tmp); mem_free(tmp); } return (status_ask_choice(choicestr, char_choice, nb_choice)); } /* Erase part of a window. */ void erase_window_part(WINDOW * win, int first_col, int first_row, int last_col, int last_row) { int c, r; for (r = first_row; r <= last_row; r++) { for (c = first_col; c <= last_col; c++) mvwaddstr(win, r, c, " "); } } /* draws a popup window */ WINDOW *popup(int pop_row, int pop_col, int pop_y, int pop_x, const char *title, const char *msg, int hint) { const char *any_key = _("Press any key to continue..."); WINDOW *popup_win; const int MSGXPOS = 5; popup_win = newwin(pop_row, pop_col, pop_y, pop_x); keypad(popup_win, TRUE); if (msg) mvwaddstr(popup_win, MSGXPOS, (pop_col - strlen(msg)) / 2, msg); custom_apply_attr(popup_win, ATTR_HIGHEST); box(popup_win, 0, 0); wins_show(popup_win, title); if (hint) mvwaddstr(popup_win, pop_row - 2, pop_col - (strlen(any_key) + 1), any_key); custom_remove_attr(popup_win, ATTR_HIGHEST); wins_wrefresh(popup_win); return popup_win; } /* prints in middle of a panel */ void print_in_middle(WINDOW * win, int starty, int startx, int width, const char *string) { int len = strlen(string); int x, y; win = win ? win : stdscr; getyx(win, y, x); x = startx ? startx : x; y = starty ? starty : y; width = width ? width : 80; x += (width - len) / 2; custom_apply_attr(win, ATTR_HIGHEST); mvwaddstr(win, y, x, string); custom_remove_attr(win, ATTR_HIGHEST); } /* checks if a string is only made of digits */ int is_all_digit(const char *string) { for (; *string; string++) { if (!isdigit((int)*string)) return 0; } return 1; } /* Given an item date expressed in seconds, return its start time in seconds. */ long get_item_time(long date) { return (long)(get_item_hour(date) * HOURINSEC + get_item_min(date) * MININSEC); } int get_item_hour(long date) { struct tm lt; localtime_r((time_t *) & date, <); return lt.tm_hour; } int get_item_min(long date) { struct tm lt; localtime_r((time_t *) & date, <); return lt.tm_min; } long date2sec(struct date day, unsigned hour, unsigned min) { time_t t = now(); struct tm start; localtime_r(&t, &start); start.tm_mon = day.mm - 1; start.tm_mday = day.dd; start.tm_year = day.yyyy - 1900; start.tm_hour = hour; start.tm_min = min; start.tm_sec = 0; start.tm_isdst = -1; t = mktime(&start); EXIT_IF(t == -1, _("failure in mktime")); return t; } /* Return a string containing the date, given a date in seconds. */ char *date_sec2date_str(long sec, const char *datefmt) { struct tm lt; char *datestr = (char *)mem_calloc(BUFSIZ, sizeof(char)); if (sec == 0) { strncpy(datestr, "0", BUFSIZ); } else { localtime_r((time_t *) & sec, <); strftime(datestr, BUFSIZ, datefmt, <); } return datestr; } /* Generic function to format date. */ void date_sec2date_fmt(long sec, const char *fmt, char *datef) { #if ENABLE_NLS /* TODO: Find a better way to deal with localization and strftime(). */ char *locale_old = mem_strdup(setlocale(LC_ALL, NULL)); setlocale(LC_ALL, "C"); #endif struct tm lt; localtime_r((time_t *) & sec, <); strftime(datef, BUFSIZ, fmt, <); #if ENABLE_NLS setlocale(LC_ALL, locale_old); mem_free(locale_old); #endif } /* * Used to change date by adding a certain amount of days or weeks. */ long date_sec_change(long date, int delta_month, int delta_day) { struct tm lt; time_t t; t = date; localtime_r(&t, <); lt.tm_mon += delta_month; lt.tm_mday += delta_day; lt.tm_isdst = -1; t = mktime(<); EXIT_IF(t == -1, _("failure in mktime")); return t; } /* * Return a long containing the date which is updated taking into account * the new time and date entered by the user. */ long update_time_in_date(long date, unsigned hr, unsigned mn) { struct tm lt; time_t t, new_date; t = date; localtime_r(&t, <); lt.tm_hour = hr; lt.tm_min = mn; new_date = mktime(<); EXIT_IF(new_date == -1, _("error in mktime")); return new_date; } /* * Returns the date in seconds from year 1900. * If no date is entered, current date is chosen. */ long get_sec_date(struct date date) { struct tm ptrtime; time_t timer; long long_date; char current_day[] = "dd "; char current_month[] = "mm "; char current_year[] = "yyyy "; if (date.yyyy == 0 && date.mm == 0 && date.dd == 0) { timer = time(NULL); localtime_r(&timer, &ptrtime); strftime(current_day, strlen(current_day), "%d", &ptrtime); strftime(current_month, strlen(current_month), "%m", &ptrtime); strftime(current_year, strlen(current_year), "%Y", &ptrtime); date.mm = atoi(current_month); date.dd = atoi(current_day); date.yyyy = atoi(current_year); } long_date = date2sec(date, 0, 0); return long_date; } long min2sec(unsigned minutes) { return minutes * MININSEC; } /* * Display a scroll bar when there are so many items that they * can not be displayed inside the corresponding panel. */ void draw_scrollbar(WINDOW * win, int y, int x, int length, int bar_top, int bar_bottom, unsigned hilt) { mvwvline(win, bar_top, x, ACS_VLINE, bar_bottom - bar_top + 1); if (hilt) custom_apply_attr(win, ATTR_HIGHEST); wattron(win, A_REVERSE); mvwvline(win, y, x, ' ', length); wattroff(win, A_REVERSE); if (hilt) custom_remove_attr(win, ATTR_HIGHEST); } /* * Print an item (either an appointment, event, or todo) in a * popup window. This is useful if an item description is too * long to fit in its corresponding panel window. */ void item_in_popup(const char *a_start, const char *a_end, const char *msg, const char *pop_title) { WINDOW *popup_win, *pad; const int margin_left = 4, margin_top = 4; const int winl = row - 5, winw = col - margin_left; const int padl = winl - 2, padw = winw - margin_left; pad = newpad(padl, padw); popup_win = popup(winl, winw, 1, 2, pop_title, NULL, 1); if (a_start && a_end) { mvwprintw(popup_win, margin_top, margin_left, "- %s -> %s", a_start, a_end); } mvwaddstr(pad, 0, margin_left, msg); wmove(win[STA].p, 0, 0); pnoutrefresh(pad, 0, 0, margin_top + 2, margin_left, padl, winw); wins_doupdate(); wgetch(popup_win); delwin(pad); delwin(popup_win); } /* Returns the beginning of current day in seconds from 1900. */ long get_today(void) { struct tm lt; time_t current_time; long current_day; struct date day; current_time = time(NULL); localtime_r(¤t_time, <); day.mm = lt.tm_mon + 1; day.dd = lt.tm_mday; day.yyyy = lt.tm_year + 1900; current_day = date2sec(day, 0, 0); return current_day; } /* Returns the current time in seconds. */ long now(void) { return (long)time(NULL); } char *nowstr(void) { struct tm lt; static char buf[BUFSIZ]; time_t t = now(); localtime_r(&t, <); strftime(buf, sizeof buf, "%a %b %d %T %Y", <); return buf; } /* Print the given option value with appropriate color. */ void print_bool_option_incolor(WINDOW * win, unsigned option, int pos_y, int pos_x) { int color = 0; const char *option_value; if (option == 1) { color = ATTR_TRUE; option_value = _("yes"); } else if (option == 0) { color = ATTR_FALSE; option_value = _("no"); } else { EXIT(_("option not defined")); } custom_apply_attr(win, color); mvwaddstr(win, pos_y, pos_x, option_value); custom_remove_attr(win, color); wnoutrefresh(win); wins_doupdate(); } /* * Get the name of the default directory for temporary files. */ const char *get_tempdir(void) { if (getenv("TMPDIR")) return getenv("TMPDIR"); #ifdef P_tmpdir else if (P_tmpdir) return P_tmpdir; #endif else return "/tmp"; } /* * Create a new unique file, and return a newly allocated string which contains * the random part of the file name. */ char *new_tempfile(const char *prefix) { char *fullname; int fd; FILE *file; if (prefix == NULL) return NULL; asprintf(&fullname, "%s.XXXXXX", prefix); if ((fd = mkstemp(fullname)) == -1 || (file = fdopen(fd, "w+")) == NULL) { if (fd != -1) { unlink(fullname); close(fd); } ERROR_MSG(_("temporary file \"%s\" could not be created"), fullname); mem_free(fullname); return NULL; } fclose(file); return fullname; } static void get_ymd(int *year, int *month, int *day, time_t t) { struct tm tm; localtime_r(&t, &tm); *day = tm.tm_mday; *month = tm.tm_mon + 1; *year = tm.tm_year + 1900; } static void get_weekday_ymd(int *year, int *month, int *day, int weekday) { time_t t = get_today(); struct tm tm; int delta; localtime_r(&t, &tm); delta = weekday - tm.tm_wday; t = date_sec_change(t, 0, delta > 0 ? delta : 7); localtime_r(&t, &tm); *day = tm.tm_mday; *month = tm.tm_mon + 1; *year = tm.tm_year + 1900; } /* * Check if a date is valid. */ int check_date(unsigned year, unsigned month, unsigned day) { return (year >= 1902 && month >= 1 && month <= 12 && day >= 1 && day <= days[month - 1] + (month == 2 && ISLEAP(year)) ? 1 : 0); } /* * Convert a string containing a date into three integers containing the year, * month and day. * * If a pointer to a date structure containing the current date is passed as * last parameter ("slctd_date"), the function will accept several short forms, * e.g. "26" for the 26th of the current month/year or "3/1" for Mar 01 (or Jan * 03, depending on the date format) of the current year. If a null pointer is * passed, short forms won't be accepted at all. * * Returns 1 if sucessfully converted or 0 if the string is an invalid date. */ int parse_date(const char *date_string, enum datefmt datefmt, int *year, int *month, int *day, struct date *slctd_date) { const char sep = (datefmt == DATEFMT_ISO) ? '-' : '/'; const char *p; int in[3] = { 0, 0, 0 }, n = 0; int d, m, y; if (!date_string) return 0; if (!strcasecmp(date_string, "today")) { get_ymd(year, month, day, get_today()); return 1; } else if (!strcasecmp(date_string, "yesterday")) { get_ymd(year, month, day, date_sec_change(get_today(), 0, -1)); return 1; } else if (!strcasecmp(date_string, "tomorrow")) { get_ymd(year, month, day, date_sec_change(get_today(), 0, 1)); return 1; } else if (!strcasecmp(date_string, "now")) { get_ymd(year, month, day, now()); return 1; } else if (!strcasecmp(date_string, "sunday") || !strcasecmp(date_string, "sun")) { get_weekday_ymd(year, month, day, 0); return 1; } else if (!strcasecmp(date_string, "monday") || !strcasecmp(date_string, "mon")) { get_weekday_ymd(year, month, day, 1); return 1; } else if (!strcasecmp(date_string, "tuesday") || !strcasecmp(date_string, "tue")) { get_weekday_ymd(year, month, day, 2); return 1; } else if (!strcasecmp(date_string, "wednesday") || !strcasecmp(date_string, "wed")) { get_weekday_ymd(year, month, day, 3); return 1; } else if (!strcasecmp(date_string, "thursday") || !strcasecmp(date_string, "thu")) { get_weekday_ymd(year, month, day, 4); return 1; } else if (!strcasecmp(date_string, "friday") || !strcasecmp(date_string, "fri")) { get_weekday_ymd(year, month, day, 5); return 1; } else if (!strcasecmp(date_string, "saturday") || !strcasecmp(date_string, "sat")) { get_weekday_ymd(year, month, day, 6); return 1; } /* parse string into in[], read up to three integers */ for (p = date_string; *p; p++) { if (*p == sep) { if ((++n) > 2) return 0; } else if ((*p >= '0') && (*p <= '9')) { in[n] = in[n] * 10 + (int)(*p - '0'); } else { return 0; } } if ((!slctd_date && n < 2) || in[n] == 0) return 0; /* convert into day, month and year, depending on the date format */ switch (datefmt) { case DATEFMT_MMDDYYYY: m = (n >= 1) ? in[0] : 0; d = (n >= 1) ? in[1] : in[0]; y = in[2]; break; case DATEFMT_DDMMYYYY: d = in[0]; m = in[1]; y = in[2]; break; case DATEFMT_YYYYMMDD: case DATEFMT_ISO: y = (n >= 2) ? in[n - 2] : 0; m = (n >= 1) ? in[n - 1] : 0; d = in[n]; break; default: return 0; } if (slctd_date) { if (y > 0 && y < 100) { /* convert "YY" format into "YYYY" */ y += slctd_date->yyyy - slctd_date->yyyy % 100; } else if (n < 2) { /* set year and, optionally, month if short from is used */ y = slctd_date->yyyy; if (n < 1) m = slctd_date->mm; } } /* check if date is valid, take leap years into account */ if (!check_date(y, m, d)) return 0; if (year) *year = y; if (month) *month = m; if (day) *day = d; return 1; } /* * Check if time is valid. */ int check_time(unsigned hours, unsigned minutes) { return (hours < DAYINHOURS && minutes < HOURINMIN); } /* * Converts a time string into hours and minutes. Short forms like "23:" * (23:00) or ":45" (0:45) are allowed. * * Returns 1 on success and 0 on failure. */ int parse_time(const char *string, unsigned *hour, unsigned *minute) { const char *p; unsigned in[2] = { 0, 0 }, n = 0; if (!string) return 0; /* parse string into in[], read up to two integers */ for (p = string; *p; p++) { if (*p == ':') { if ((++n) > 1) return 0; } else if ((*p >= '0') && (*p <= '9')) { if ((n == 0) && (p == (string + 2)) && *(p + 1)) n++; in[n] = in[n] * 10 + (int)(*p - '0'); } else { return 0; } } if (n != 1 || !check_time(in[0], in[1])) return 0; *hour = in[0]; *minute = in[1]; return 1; } /* * Converts a duration string into minutes. * * Allowed formats (noted as regular expressions): * * - \d*:\d* * - (\d*m|\d*h(|\d*m)|\d*d(|\d*m|\d*h(|\d*m))) * - \d+ * * "\d" is used as a placeholder for "(0|1|2|3|4|5|6|7|8|9)". * * Returns 1 on success and 0 on failure. */ int parse_duration(const char *string, unsigned *duration) { enum { STATE_INITIAL, STATE_HHMM_MM, STATE_DDHHMM_HH, STATE_DDHHMM_MM, STATE_DONE } state = STATE_INITIAL; const char *p; unsigned in = 0; unsigned dur = 0; if (!string || *string == '\0') return 0; /* parse string using a simple state machine */ for (p = string; *p; p++) { if (state == STATE_DONE) { return 0; } else if ((*p >= '0') && (*p <= '9')) { in = in * 10 + (int)(*p - '0'); } else { switch (state) { case STATE_INITIAL: if (*p == ':') { dur += in * HOURINMIN; state = STATE_HHMM_MM; } else if (*p == 'd') { dur += in * DAYINMIN; state = STATE_DDHHMM_HH; } else if (*p == 'h') { dur += in * HOURINMIN; state = STATE_DDHHMM_MM; } else if (*p == 'm') { dur += in; state = STATE_DONE; } else { return 0; } break; case STATE_DDHHMM_HH: if (*p == 'h') { dur += in * HOURINMIN; state = STATE_DDHHMM_MM; } else if (*p == 'm') { dur += in; state = STATE_DONE; } else { return 0; } break; case STATE_DDHHMM_MM: if (*p == 'm') { dur += in; state = STATE_DONE; } else { return 0; } break; case STATE_HHMM_MM: return 0; break; default: break; } in = 0; } } if ((state == STATE_HHMM_MM && in >= HOURINMIN) || ((state == STATE_DDHHMM_HH || state == STATE_DDHHMM_MM) && in > 0)) return 0; dur += in; *duration = dur; return 1; } void file_close(FILE * f, const char *pos) { EXIT_IF((fclose(f)) != 0, _("Error when closing file at %s"), pos); } /* * Sleep the given number of seconds, but make it more 'precise' than sleep(3) * (hence the 'p') in a way that even if a signal is caught during the sleep * process, this function will return to sleep afterwards. */ void psleep(unsigned secs) { unsigned unslept; for (unslept = sleep(secs); unslept; unslept = sleep(unslept)) ; } /* * Fork and execute an external process. * * If pfdin and/or pfdout point to a valid address, a pipe is created and the * appropriate file descriptors are written to pfdin/pfdout. */ int fork_exec(int *pfdin, int *pfdout, const char *path, const char *const *arg) { int pin[2], pout[2]; int pid; if (pfdin && (pipe(pin) == -1)) return 0; if (pfdout && (pipe(pout) == -1)) return 0; if ((pid = fork()) == 0) { if (pfdout) { if (dup2(pout[0], STDIN_FILENO) < 0) _exit(127); close(pout[0]); close(pout[1]); } if (pfdin) { if (dup2(pin[1], STDOUT_FILENO) < 0) _exit(127); close(pin[0]); close(pin[1]); } execvp(path, (char *const *)arg); _exit(127); } else { if (pfdin) close(pin[1]); if (pfdout) close(pout[0]); if (pid > 0) { if (pfdin) { fcntl(pin[0], F_SETFD, FD_CLOEXEC); *pfdin = pin[0]; } if (pfdout) { fcntl(pout[1], F_SETFD, FD_CLOEXEC); *pfdout = pout[1]; } } else { if (pfdin) close(pin[0]); if (pfdout) close(pout[1]); return 0; } } return pid; } /* Execute an external program in a shell. */ int shell_exec(int *pfdin, int *pfdout, const char *path, const char *const *arg) { int argc, i; const char **narg; char *arg0 = NULL; int ret; for (argc = 0; arg[argc]; argc++) ; if (argc < 1) return -1; narg = mem_calloc(argc + 4, sizeof(const char *)); narg[0] = "sh"; narg[1] = "-c"; if (argc > 1) { asprintf(&arg0, "%s \"$@\"", path); narg[2] = arg0; for (i = 0; i < argc; i++) narg[i + 3] = arg[i]; narg[argc + 3] = NULL; } else { narg[2] = path; narg[3] = NULL; } ret = fork_exec(pfdin, pfdout, *narg, narg); if (arg0) mem_free(arg0); mem_free(narg); return ret; } /* Wait for a child process to terminate. */ int child_wait(int *pfdin, int *pfdout, int pid) { int stat; if (pfdin) close(*pfdin); if (pfdout) close(*pfdout); waitpid(pid, &stat, 0); return stat; } /* Display "Press any key to continue..." and wait for a key press. */ void press_any_key(void) { struct termios t_attr_old, t_attr; tcgetattr(STDIN_FILENO, &t_attr_old); memcpy(&t_attr, &t_attr_old, sizeof(struct termios)); t_attr.c_lflag &= ~(ICANON | ECHO | ECHONL); tcsetattr(STDIN_FILENO, TCSAFLUSH, &t_attr); fflush(stdout); fputs(_("Press any key to continue..."), stdout); fflush(stdout); fgetc(stdin); fflush(stdin); fputs("\r\n", stdout); tcsetattr(STDIN_FILENO, TCSAFLUSH, &t_attr_old); } /* * Display note contents if one is asociated with the currently displayed item * (to be used together with the '-a' or '-t' flag in non-interactive mode). * Each line begins with nbtab tabs. * Print "No note file found", if the notefile does not exists. * * (patch submitted by Erik Saule). */ static void print_notefile(FILE * out, const char *filename, int nbtab) { char *path_to_notefile; FILE *notefile; char linestarter[BUFSIZ]; char buffer[BUFSIZ]; int i; int printlinestarter = 1; if (nbtab < BUFSIZ) { for (i = 0; i < nbtab; i++) linestarter[i] = '\t'; linestarter[nbtab] = '\0'; } else { linestarter[0] = '\0'; } asprintf(&path_to_notefile, "%s/%s", path_notes, filename); notefile = fopen(path_to_notefile, "r"); mem_free(path_to_notefile); if (notefile) { while (fgets(buffer, BUFSIZ, notefile) != 0) { if (printlinestarter) { fputs(linestarter, out); printlinestarter = 0; } fputs(buffer, out); if (buffer[strlen(buffer) - 1] == '\n') printlinestarter = 1; } fputs("\n", out); file_close(notefile, __FILE_POS__); } else { fputs(linestarter, out); fputs(_("No note file found\n"), out); } } /* Print an escape sequence and return its length. */ static int print_escape(const char *s) { switch (*(s + 1)) { case 'a': putchar('\a'); return 1; case 'b': putchar('\b'); return 1; case 'f': putchar('\f'); return 1; case 'n': putchar('\n'); return 1; case 'r': putchar('\r'); return 1; case 't': putchar('\t'); return 1; case 'v': putchar('\v'); return 1; case '0': putchar('\0'); return 1; case '\'': putchar('\''); return 1; case '"': putchar('"'); return 1; case '\?': putchar('?'); return 1; case '\\': putchar('\\'); return 1; case '\0': return 0; default: return 1; } } /* Parse a format specifier. */ static enum format_specifier parse_fs(const char **s, char *extformat) { char buf[FS_EXT_MAXLEN]; int i; extformat[0] = '\0'; switch (**s) { case 's': strcpy(extformat, "epoch"); return FS_STARTDATE; case 'S': return FS_STARTDATE; case 'd': return FS_DURATION; case 'e': strcpy(extformat, "epoch"); return FS_ENDDATE; case 'E': return FS_ENDDATE; case 'm': return FS_MESSAGE; case 'n': return FS_NOTE; case 'N': return FS_NOTEFILE; case 'p': return FS_PRIORITY; case 'r': return FS_REMAINING; case '(': /* Long format specifier. */ for ((*s)++, i = 0; **s != ':' && **s != ')'; (*s)++, i++) { if (**s == '\0') return FS_EOF; if (i < FS_EXT_MAXLEN) buf[i] = **s; } buf[(i < FS_EXT_MAXLEN) ? i : FS_EXT_MAXLEN - 1] = '\0'; if (**s == ':') { for ((*s)++, i = 0; **s != ')'; (*s)++, i++) { if (**s == '\0') return FS_EOF; if (i < FS_EXT_MAXLEN) extformat[i] = **s; } extformat[(i < FS_EXT_MAXLEN) ? i : FS_EXT_MAXLEN - 1] = '\0'; } if (!strcmp(buf, "start")) return FS_STARTDATE; else if (!strcmp(buf, "duration")) return FS_DURATION; else if (!strcmp(buf, "end")) return FS_ENDDATE; else if (!strcmp(buf, "remaining")) return FS_REMAINING; else if (!strcmp(buf, "message")) return FS_MESSAGE; else if (!strcmp(buf, "noteid")) return FS_NOTE; else if (!strcmp(buf, "note")) return FS_NOTEFILE; else if (!strcmp(buf, "priority")) return FS_PRIORITY; else return FS_UNKNOWN; case '%': return FS_PSIGN; case '\0': return FS_EOF; default: return FS_UNKNOWN; } } /* Print a formatted date to stdout. */ static void print_date(long date, long day, const char *extformat) { char buf[BUFSIZ]; if (!strcmp(extformat, "epoch")) { printf("%ld", date); } else { time_t day_end = date_sec_change(day, 0, 1); time_t t = date; struct tm lt; localtime_r((time_t *) & t, <); if (extformat[0] == '\0' || !strcmp(extformat, "default")) { if (date >= day && date <= day_end) strftime(buf, BUFSIZ, "%H:%M", <); else strftime(buf, BUFSIZ, "..:..", <); } else { strftime(buf, BUFSIZ, extformat, <); } printf("%s", buf); } } /* Print a time difference to stdout. */ static void print_datediff(long difference, const char *extformat) { const char *p; const char *numfmt; bool usetotal; long value; if (!strcmp(extformat, "epoch")) { printf("%ld", difference); } else { if (extformat[0] == '\0' || !strcmp(extformat, "default")) { /* Set a default format if none specified. */ p = "%EH:%M"; } else { p = extformat; } while (*p) { if (*p == '%') { p++; /* Default is to zero-pad, and assume * the user wants the time unit modulo * the next biggest time unit. */ numfmt = "%02d"; usetotal = FALSE; if (*p == '-') { numfmt = "%d"; p++; } if (*p == 'E') { usetotal = TRUE; p++; } switch (*p) { case '\0': return; case 'd': value = difference / DAYINSEC; printf(numfmt, value); break; case 'H': value = difference / HOURINSEC; if (!usetotal) value %= DAYINHOURS; printf(numfmt, value); break; case 'M': value = difference / MININSEC; if (!usetotal) value %= HOURINMIN; printf(numfmt, value); break; case 'S': value = difference; if (!usetotal) value %= MININSEC; printf(numfmt, value); break; case '%': putchar('%'); break; default: putchar('?'); break; } } else { putchar(*p); } p++; } } } /* Print a formatted appointment to stdout. */ void print_apoint(const char *format, long day, struct apoint *apt) { const char *p; char extformat[FS_EXT_MAXLEN]; for (p = format; *p; p++) { if (*p == '%') { p++; switch (parse_fs(&p, extformat)) { case FS_STARTDATE: print_date(apt->start, day, extformat); break; case FS_DURATION: /* Backwards compatibility: Use epoch by * default. */ if (*extformat == '\0') strcpy(extformat, "epoch"); print_datediff(apt->dur, extformat); break; case FS_ENDDATE: print_date(apt->start + apt->dur, day, extformat); break; case FS_REMAINING: print_datediff(difftime(apt->start, now()), extformat); break; case FS_MESSAGE: printf("%s", apt->mesg); break; case FS_NOTE: printf("%s", apt->note); break; case FS_NOTEFILE: print_notefile(stdout, apt->note, 1); break; case FS_PSIGN: putchar('%'); break; case FS_EOF: return; break; default: putchar('?'); break; } } else if (*p == '\\') { p += print_escape(p); } else { putchar(*p); } } } /* Print a formatted event to stdout. */ void print_event(const char *format, long day, struct event *ev) { const char *p; char extformat[FS_EXT_MAXLEN]; for (p = format; *p; p++) { if (*p == '%') { p++; switch (parse_fs(&p, extformat)) { case FS_MESSAGE: printf("%s", ev->mesg); break; case FS_NOTE: printf("%s", ev->note); break; case FS_NOTEFILE: print_notefile(stdout, ev->note, 1); break; case FS_PSIGN: putchar('%'); break; case FS_EOF: return; break; default: putchar('?'); break; } } else if (*p == '\\') { p += print_escape(p); } else { putchar(*p); } } } /* Print a formatted recurrent appointment to stdout. */ void print_recur_apoint(const char *format, long day, unsigned occurrence, struct recur_apoint *rapt) { struct apoint apt; apt.start = occurrence; apt.dur = rapt->dur; apt.mesg = rapt->mesg; apt.note = rapt->note; print_apoint(format, day, &apt); } /* Print a formatted recurrent event to stdout. */ void print_recur_event(const char *format, long day, struct recur_event *rev) { struct event ev; ev.mesg = rev->mesg; ev.note = rev->note; print_event(format, day, &ev); } /* Print a formatted todo item to stdout. */ void print_todo(const char *format, struct todo *todo) { const char *p; char extformat[FS_EXT_MAXLEN]; for (p = format; *p; p++) { if (*p == '%') { p++; switch (parse_fs(&p, extformat)) { case FS_PRIORITY: printf("%d", abs(todo->id)); break; case FS_MESSAGE: printf("%s", todo->mesg); break; case FS_NOTE: printf("%s", todo->note); break; case FS_NOTEFILE: print_notefile(stdout, todo->note, 1); break; case FS_PSIGN: putchar('%'); break; case FS_EOF: return; break; default: putchar('?'); break; } } else if (*p == '\\') { p += print_escape(p); } else { putchar(*p); } } } #define VASPRINTF_INITIAL_BUFSIZE 128 int vasprintf(char **str, const char *format, va_list ap) { va_list ap2; int n; va_copy(ap2, ap); *str = mem_malloc(VASPRINTF_INITIAL_BUFSIZE); n = vsnprintf(*str, VASPRINTF_INITIAL_BUFSIZE, format, ap); if (n >= VASPRINTF_INITIAL_BUFSIZE) { *str = mem_realloc(*str, 1, n + 1); n = vsnprintf(*str, n + 1, format, ap2); } if (n < 0) { mem_free(*str); *str = NULL; } return n; } int asprintf(char **str, const char *format, ...) { va_list ap; int n; va_start(ap, format); n = vasprintf(str, format, ap); va_end(ap); return n; } calcurse-4.0.0/src/event.c0000644000175000017500000001100612472326722012316 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include "calcurse.h" llist_t eventlist; void event_free(struct event *ev) { mem_free(ev->mesg); erase_note(&ev->note); mem_free(ev); } struct event *event_dup(struct event *in) { EXIT_IF(!in, _("null pointer")); struct event *ev = mem_malloc(sizeof(struct event)); ev->id = in->id; ev->day = in->day; ev->mesg = mem_strdup(in->mesg); if (in->note) ev->note = mem_strdup(in->note); else ev->note = NULL; return ev; } void event_llist_init(void) { LLIST_INIT(&eventlist); } void event_llist_free(void) { LLIST_FREE_INNER(&eventlist, event_free); LLIST_FREE(&eventlist); } static int event_cmp_day(struct event *a, struct event *b) { return a->day < b->day ? -1 : (a->day == b->day ? 0 : 1); } /* Create a new event */ struct event *event_new(char *mesg, char *note, long day, int id) { struct event *ev; ev = mem_malloc(sizeof(struct event)); ev->mesg = mem_strdup(mesg); ev->day = day; ev->id = id; ev->note = (note != NULL) ? mem_strdup(note) : NULL; LLIST_ADD_SORTED(&eventlist, ev, event_cmp_day); return ev; } /* Check if the event belongs to the selected day */ unsigned event_inday(struct event *i, long *start) { return (i->day < *start + DAYINSEC && i->day >= *start); } /* Write to file the event in user-friendly format */ void event_write(struct event *o, FILE * f) { struct tm lt; time_t t; t = o->day; localtime_r(&t, <); fprintf(f, "%02u/%02u/%04u [%d] ", lt.tm_mon + 1, lt.tm_mday, 1900 + lt.tm_year, o->id); if (o->note != NULL) fprintf(f, ">%s ", o->note); fprintf(f, "%s\n", o->mesg); } /* Load the events from file */ struct event *event_scan(FILE * f, struct tm start, int id, char *note, struct item_filter *filter) { char buf[BUFSIZ], *nl; time_t tstart; EXIT_IF(!check_date(start.tm_year, start.tm_mon, start.tm_mday) || !check_time(start.tm_hour, start.tm_min), _("date error in event")); /* Read the event description */ if (!fgets(buf, sizeof buf, f)) return NULL; nl = strchr(buf, '\n'); if (nl) { *nl = '\0'; } start.tm_hour = 0; start.tm_min = 0; start.tm_sec = 0; start.tm_isdst = -1; start.tm_year -= 1900; start.tm_mon--; tstart = mktime(&start); EXIT_IF(tstart == -1, _("date error in the event\n")); /* Filter item. */ if (filter) { if (!(filter->type_mask & TYPE_MASK_EVNT)) return NULL; if (filter->regex && regexec(filter->regex, buf, 0, 0, 0)) return NULL; if (filter->start_from >= 0 && tstart < filter->start_from) return NULL; if (filter->start_to >= 0 && tstart > filter->start_to) return NULL; } return event_new(buf, note, tstart, id); } /* Delete an event from the list. */ void event_delete(struct event *ev) { llist_item_t *i = LLIST_FIND_FIRST(&eventlist, ev, NULL); if (!i) EXIT(_("no such appointment")); LLIST_REMOVE(&eventlist, i); } void event_paste_item(struct event *ev, long date) { ev->day = date; LLIST_ADD_SORTED(&eventlist, ev, event_cmp_day); } calcurse-4.0.0/src/utf8.c0000644000175000017500000002032412472326722012066 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include "calcurse.h" struct utf8_range { int min, max, width; }; static const struct utf8_range utf8_widthtab[] = { {0x00300, 0x0036f, 0}, {0x00483, 0x00489, 0}, {0x00591, 0x005bd, 0}, {0x005bf, 0x005bf, 0}, {0x005c1, 0x005c2, 0}, {0x005c4, 0x005c5, 0}, {0x005c7, 0x005c7, 0}, {0x00610, 0x0061a, 0}, {0x0064b, 0x0065e, 0}, {0x00670, 0x00670, 0}, {0x006d6, 0x006dc, 0}, {0x006de, 0x006e4, 0}, {0x006e7, 0x006e8, 0}, {0x006ea, 0x006ed, 0}, {0x00711, 0x00711, 0}, {0x00730, 0x0074a, 0}, {0x007a6, 0x007b0, 0}, {0x007eb, 0x007f3, 0}, {0x00816, 0x00819, 0}, {0x0081b, 0x00823, 0}, {0x00825, 0x00827, 0}, {0x00829, 0x0082d, 0}, {0x00900, 0x00903, 0}, {0x0093c, 0x0093c, 0}, {0x0093e, 0x0094e, 0}, {0x00951, 0x00955, 0}, {0x00962, 0x00963, 0}, {0x00981, 0x00983, 0}, {0x009bc, 0x009bc, 0}, {0x009be, 0x009c4, 0}, {0x009c7, 0x009c8, 0}, {0x009cb, 0x009cd, 0}, {0x009d7, 0x009d7, 0}, {0x009e2, 0x009e3, 0}, {0x00a01, 0x00a03, 0}, {0x00a3c, 0x00a3c, 0}, {0x00a3e, 0x00a42, 0}, {0x00a47, 0x00a48, 0}, {0x00a4b, 0x00a4d, 0}, {0x00a51, 0x00a51, 0}, {0x00a70, 0x00a71, 0}, {0x00a75, 0x00a75, 0}, {0x00a81, 0x00a83, 0}, {0x00abc, 0x00abc, 0}, {0x00abe, 0x00ac5, 0}, {0x00ac7, 0x00ac9, 0}, {0x00acb, 0x00acd, 0}, {0x00ae2, 0x00ae3, 0}, {0x00b01, 0x00b03, 0}, {0x00b3c, 0x00b3c, 0}, {0x00b3e, 0x00b44, 0}, {0x00b47, 0x00b48, 0}, {0x00b4b, 0x00b4d, 0}, {0x00b56, 0x00b57, 0}, {0x00b62, 0x00b63, 0}, {0x00b82, 0x00b82, 0}, {0x00bbe, 0x00bc2, 0}, {0x00bc6, 0x00bc8, 0}, {0x00bca, 0x00bcd, 0}, {0x00bd7, 0x00bd7, 0}, {0x00c01, 0x00c03, 0}, {0x00c3e, 0x00c44, 0}, {0x00c46, 0x00c48, 0}, {0x00c4a, 0x00c4d, 0}, {0x00c55, 0x00c56, 0}, {0x00c62, 0x00c63, 0}, {0x00c82, 0x00c83, 0}, {0x00cbc, 0x00cbc, 0}, {0x00cbe, 0x00cc4, 0}, {0x00cc6, 0x00cc8, 0}, {0x00cca, 0x00ccd, 0}, {0x00cd5, 0x00cd6, 0}, {0x00ce2, 0x00ce3, 0}, {0x00d02, 0x00d03, 0}, {0x00d3e, 0x00d44, 0}, {0x00d46, 0x00d48, 0}, {0x00d4a, 0x00d4d, 0}, {0x00d57, 0x00d57, 0}, {0x00d62, 0x00d63, 0}, {0x00d82, 0x00d83, 0}, {0x00dca, 0x00dca, 0}, {0x00dcf, 0x00dd4, 0}, {0x00dd6, 0x00dd6, 0}, {0x00dd8, 0x00ddf, 0}, {0x00df2, 0x00df3, 0}, {0x00e31, 0x00e31, 0}, {0x00e34, 0x00e3a, 0}, {0x00e47, 0x00e4e, 0}, {0x00eb1, 0x00eb1, 0}, {0x00eb4, 0x00eb9, 0}, {0x00ebb, 0x00ebc, 0}, {0x00ec8, 0x00ecd, 0}, {0x00f18, 0x00f19, 0}, {0x00f35, 0x00f35, 0}, {0x00f37, 0x00f37, 0}, {0x00f39, 0x00f39, 0}, {0x00f3e, 0x00f3f, 0}, {0x00f71, 0x00f84, 0}, {0x00f86, 0x00f87, 0}, {0x00f90, 0x00f97, 0}, {0x00f99, 0x00fbc, 0}, {0x00fc6, 0x00fc6, 0}, {0x0102b, 0x0103e, 0}, {0x01056, 0x01059, 0}, {0x0105e, 0x01060, 0}, {0x01062, 0x01064, 0}, {0x01067, 0x0106d, 0}, {0x01071, 0x01074, 0}, {0x01082, 0x0108d, 0}, {0x0108f, 0x0108f, 0}, {0x0109a, 0x0109d, 0}, {0x01100, 0x0115f, 2}, {0x011a3, 0x011a7, 2}, {0x011fa, 0x011ff, 2}, {0x0135f, 0x0135f, 0}, {0x01712, 0x01714, 0}, {0x01732, 0x01734, 0}, {0x01752, 0x01753, 0}, {0x01772, 0x01773, 0}, {0x017b6, 0x017d3, 0}, {0x017dd, 0x017dd, 0}, {0x0180b, 0x0180d, 0}, {0x018a9, 0x018a9, 0}, {0x01920, 0x0192b, 0}, {0x01930, 0x0193b, 0}, {0x019b0, 0x019c0, 0}, {0x019c8, 0x019c9, 0}, {0x01a17, 0x01a1b, 0}, {0x01a55, 0x01a5e, 0}, {0x01a60, 0x01a7c, 0}, {0x01a7f, 0x01a7f, 0}, {0x01b00, 0x01b04, 0}, {0x01b34, 0x01b44, 0}, {0x01b6b, 0x01b73, 0}, {0x01b80, 0x01b82, 0}, {0x01ba1, 0x01baa, 0}, {0x01c24, 0x01c37, 0}, {0x01cd0, 0x01cd2, 0}, {0x01cd4, 0x01ce8, 0}, {0x01ced, 0x01ced, 0}, {0x01cf2, 0x01cf2, 0}, {0x01dc0, 0x01de6, 0}, {0x01dfd, 0x01dff, 0}, {0x020d0, 0x020f0, 0}, {0x02329, 0x0232a, 2}, {0x02cef, 0x02cf1, 0}, {0x02de0, 0x02dff, 0}, {0x02e80, 0x02e99, 2}, {0x02e9b, 0x02ef3, 2}, {0x02f00, 0x02fd5, 2}, {0x02ff0, 0x02ffb, 2}, {0x03000, 0x03029, 2}, {0x0302a, 0x0302f, 0}, {0x03030, 0x0303e, 2}, {0x03041, 0x03096, 2}, {0x03099, 0x0309a, 0}, {0x0309b, 0x030ff, 2}, {0x03105, 0x0312d, 2}, {0x03131, 0x0318e, 2}, {0x03190, 0x031b7, 2}, {0x031c0, 0x031e3, 2}, {0x031f0, 0x0321e, 2}, {0x03220, 0x03247, 2}, {0x03250, 0x032fe, 2}, {0x03300, 0x04dbf, 2}, {0x04e00, 0x0a48c, 2}, {0x0a490, 0x0a4c6, 2}, {0x0a66f, 0x0a672, 0}, {0x0a67c, 0x0a67d, 0}, {0x0a6f0, 0x0a6f1, 0}, {0x0a802, 0x0a802, 0}, {0x0a806, 0x0a806, 0}, {0x0a80b, 0x0a80b, 0}, {0x0a823, 0x0a827, 0}, {0x0a880, 0x0a881, 0}, {0x0a8b4, 0x0a8c4, 0}, {0x0a8e0, 0x0a8f1, 0}, {0x0a926, 0x0a92d, 0}, {0x0a947, 0x0a953, 0}, {0x0a960, 0x0a97c, 2}, {0x0a980, 0x0a983, 0}, {0x0a9b3, 0x0a9c0, 0}, {0x0aa29, 0x0aa36, 0}, {0x0aa43, 0x0aa43, 0}, {0x0aa4c, 0x0aa4d, 0}, {0x0aa7b, 0x0aa7b, 0}, {0x0aab0, 0x0aab0, 0}, {0x0aab2, 0x0aab4, 0}, {0x0aab7, 0x0aab8, 0}, {0x0aabe, 0x0aabf, 0}, {0x0aac1, 0x0aac1, 0}, {0x0abe3, 0x0abea, 0}, {0x0abec, 0x0abed, 0}, {0x0ac00, 0x0d7a3, 2}, {0x0d7b0, 0x0d7c6, 2}, {0x0d7cb, 0x0d7fb, 2}, {0x0f900, 0x0faff, 2}, {0x0fb1e, 0x0fb1e, 0}, {0x0fe00, 0x0fe0f, 0}, {0x0fe10, 0x0fe19, 2}, {0x0fe20, 0x0fe26, 0}, {0x0fe30, 0x0fe52, 2}, {0x0fe54, 0x0fe66, 2}, {0x0fe68, 0x0fe6b, 2}, {0x0ff01, 0x0ff60, 2}, {0x0ffe0, 0x0ffe6, 2}, {0x101fd, 0x101fd, 0}, {0x10a01, 0x10a03, 0}, {0x10a05, 0x10a06, 0}, {0x10a0c, 0x10a0f, 0}, {0x10a38, 0x10a3a, 0}, {0x10a3f, 0x10a3f, 0}, {0x11080, 0x11082, 0}, {0x110b0, 0x110ba, 0}, {0x1d165, 0x1d169, 0}, {0x1d16d, 0x1d172, 0}, {0x1d17b, 0x1d182, 0}, {0x1d185, 0x1d18b, 0}, {0x1d1aa, 0x1d1ad, 0}, {0x1d242, 0x1d244, 0}, {0x1f200, 0x1f200, 2}, {0x1f210, 0x1f231, 2}, {0x1f240, 0x1f248, 2}, {0x20000, 0x2fffd, 2}, {0x30000, 0x3fffd, 2}, {0xe0100, 0xe01ef, 0} }; /* Get the width of a UTF-8 character. */ int utf8_width(char *s) { int val, low, high, cur; if (UTF8_ISCONT(*s)) return 0; switch (UTF8_LENGTH(*s)) { case 1: val = s[0]; break; case 2: val = (s[1] & 0x3f) | (s[0] & 0x1f) << 6; break; case 3: val = ((s[2] & 0x3f) | (s[1] & 0x3f) << 6) | (s[0] & 0x0f) << 12; break; case 4: val = (((s[3] & 0x3f) | (s[2] & 0x3f) << 6) | (s[1] & 0x3f) << 12) | (s[0] & 0x3f) << 18; break; case 5: val = ((((s[4] & 0x3f) | (s[3] & 0x3f) << 6) | (s[2] & 0x3f) << 12) | (s[1] & 0x3f) << 18) | (s[0] & 0x3f) << 24; break; case 6: val = (((((s[5] & 0x3f) | (s[4] & 0x3f) << 6) | (s[3] & 0x3f) << 12) | (s[2] & 0x3f) << 18) | (s[1] & 0x3f) << 24) | (s[0] & 0x3f) << 30; break; default: return 0; } low = 0; high = ARRAY_SIZE(utf8_widthtab); do { cur = (low + high) / 2; if (val >= utf8_widthtab[cur].min) { if (val <= utf8_widthtab[cur].max) return utf8_widthtab[cur].width; else low = cur + 1; } else { high = cur - 1; } } while (low <= high); return 1; } /* Get the width of a UTF-8 string. */ int utf8_strwidth(char *s) { int width = 0; for (; s && *s; s++) { if (!UTF8_ISCONT(*s)) width += utf8_width(s); } return width; } calcurse-4.0.0/src/custom.c0000644000175000017500000007055512472326722012525 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include "calcurse.h" struct attribute { int color[7]; int nocolor[7]; }; static struct attribute attr; /* * Define window attributes (for both color and non-color terminals): * ATTR_HIGHEST are for window titles * ATTR_HIGH are for month and days names * ATTR_MIDDLE are for the selected day inside calendar panel * ATTR_LOW are for days inside calendar panel which contains an event * ATTR_LOWEST are for current day inside calendar panel */ void custom_init_attr(void) { attr.color[ATTR_HIGHEST] = COLOR_PAIR(COLR_CUSTOM); attr.color[ATTR_HIGH] = COLOR_PAIR(COLR_HIGH); attr.color[ATTR_MIDDLE] = COLOR_PAIR(COLR_RED); attr.color[ATTR_LOW] = COLOR_PAIR(COLR_CYAN); attr.color[ATTR_LOWEST] = COLOR_PAIR(COLR_YELLOW); attr.color[ATTR_TRUE] = COLOR_PAIR(COLR_GREEN); attr.color[ATTR_FALSE] = COLOR_PAIR(COLR_RED); attr.nocolor[ATTR_HIGHEST] = A_BOLD; attr.nocolor[ATTR_HIGH] = A_REVERSE; attr.nocolor[ATTR_MIDDLE] = A_REVERSE; attr.nocolor[ATTR_LOW] = A_UNDERLINE; attr.nocolor[ATTR_LOWEST] = A_BOLD; attr.nocolor[ATTR_TRUE] = A_BOLD; attr.nocolor[ATTR_FALSE] = A_DIM; } /* Apply window attribute */ void custom_apply_attr(WINDOW * win, int attr_num) { if (colorize) wattron(win, attr.color[attr_num]); else wattron(win, attr.nocolor[attr_num]); } /* Remove window attribute */ void custom_remove_attr(WINDOW * win, int attr_num) { if (colorize) wattroff(win, attr.color[attr_num]); else wattroff(win, attr.nocolor[attr_num]); } static void layout_selection_bar(void) { static int bindings[] = { KEY_GENERIC_QUIT, KEY_GENERIC_SELECT, KEY_MOVE_UP, KEY_MOVE_DOWN, KEY_MOVE_LEFT, KEY_MOVE_RIGHT, KEY_GENERIC_HELP }; int bindings_size = ARRAY_SIZE(bindings); keys_display_bindings_bar(win[STA].p, bindings, bindings_size, 0, bindings_size); } #define NBLAYOUTS 8 #define LAYOUTSPERCOL 2 /* Used to display available layouts in layout configuration menu. */ static void display_layout_config(struct window *lwin, int mark, int cursor) { #define CURSOR (32 | A_REVERSE) #define MARK 88 #define LAYOUTH 5 #define LAYOUTW 9 const char *box = "[ ]"; const int BOXSIZ = strlen(box); const int NBCOLS = NBLAYOUTS / LAYOUTSPERCOL; const int COLSIZ = LAYOUTW + BOXSIZ + 1; const int XSPC = (lwin->w - NBCOLS * COLSIZ) / (NBCOLS + 1); const int XOFST = (lwin->w - NBCOLS * (XSPC + COLSIZ)) / 2; const int YSPC = (lwin->h - 8 - LAYOUTSPERCOL * LAYOUTH) / (LAYOUTSPERCOL + 1); const int YOFST = (lwin->h - LAYOUTSPERCOL * (YSPC + LAYOUTH)) / 2; enum { YPOS, XPOS, NBPOS }; int pos[NBLAYOUTS][NBPOS]; const char *layouts[LAYOUTH][NBLAYOUTS] = { {"+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+"}, {"| | c |", "| | t |", "| c | |", "| t | |", "| | c |", "| | a |", "| c | |", "| a | |"}, {"| a +---+", "| a +---+", "+---+ a |", "|---+ a |", "| t +---+", "| t +---+", "+---+ t |", "+---+ t |"}, {"| | t |", "| | c |", "| t | |", "| c | |", "| | a |", "| | c |", "| a | |", "| c | |"}, {"+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+", "+---+---+"} }; int i; for (i = 0; i < NBLAYOUTS; i++) { pos[i][YPOS] = YOFST + (i % LAYOUTSPERCOL) * (YSPC + LAYOUTH); pos[i][XPOS] = XOFST + (i / LAYOUTSPERCOL) * (XSPC + COLSIZ); } for (i = 0; i < NBLAYOUTS; i++) { int j; mvwaddstr(lwin->p, pos[i][YPOS] + 2, pos[i][XPOS], box); if (i == mark) custom_apply_attr(lwin->p, ATTR_HIGHEST); for (j = 0; j < LAYOUTH; j++) { mvwaddstr(lwin->p, pos[i][YPOS] + j, pos[i][XPOS] + BOXSIZ + 1, layouts[j][i]); } if (i == mark) custom_remove_attr(lwin->p, ATTR_HIGHEST); } mvwaddch(lwin->p, pos[mark][YPOS] + 2, pos[mark][XPOS] + 1, MARK); mvwaddch(lwin->p, pos[cursor][YPOS] + 2, pos[cursor][XPOS] + 1, CURSOR); layout_selection_bar(); wnoutrefresh(win[STA].p); wnoutrefresh(lwin->p); wins_doupdate(); if (notify_bar()) notify_update_bar(); } /* Choose the layout */ void custom_layout_config(void) { struct window conf_win; int ch, mark, cursor, need_reset; const char *label = _("layout configuration"); conf_win.p = NULL; custom_confwin_init(&conf_win, label); cursor = mark = wins_layout() - 1; display_layout_config(&conf_win, mark, cursor); clear(); while ((ch = keys_getch(win[KEY].p, NULL, NULL)) != KEY_GENERIC_QUIT) { need_reset = 0; switch (ch) { case KEY_GENERIC_SELECT: mark = cursor; break; case KEY_MOVE_DOWN: if (cursor % LAYOUTSPERCOL < LAYOUTSPERCOL - 1) cursor++; break; case KEY_MOVE_UP: if (cursor % LAYOUTSPERCOL > 0) cursor--; break; case KEY_MOVE_LEFT: if (cursor >= LAYOUTSPERCOL) cursor -= LAYOUTSPERCOL; break; case KEY_MOVE_RIGHT: if (cursor < NBLAYOUTS - LAYOUTSPERCOL) cursor += LAYOUTSPERCOL; break; case KEY_GENERIC_CANCEL: need_reset = 1; break; } if (resize) { resize = 0; endwin(); wins_refresh(); curs_set(0); need_reset = 1; } if (need_reset) custom_confwin_init(&conf_win, label); display_layout_config(&conf_win, mark, cursor); } wins_set_layout(mark + 1); delwin(conf_win.p); } #undef NBLAYOUTS #undef LAYOUTSPERCOL /* Sidebar configuration screen. */ void custom_sidebar_config(void) { static int bindings[] = { KEY_GENERIC_QUIT, KEY_MOVE_UP, KEY_MOVE_DOWN, KEY_GENERIC_HELP }; int ch, bindings_size = ARRAY_SIZE(bindings); keys_display_bindings_bar(win[STA].p, bindings, bindings_size, 0, bindings_size); wins_doupdate(); while ((ch = keys_getch(win[KEY].p, NULL, NULL)) != KEY_GENERIC_QUIT) { switch (ch) { case KEY_MOVE_UP: wins_sbar_winc(); break; case KEY_MOVE_DOWN: wins_sbar_wdec(); break; case KEY_RESIZE: break; default: continue; } if (resize) { resize = 0; wins_reset(); } else { wins_resize_panels(); wins_update_border(FLAG_ALL); wins_update_panels(FLAG_ALL); keys_display_bindings_bar(win[STA].p, bindings, bindings_size, 0, bindings_size); wins_doupdate(); } } } static void set_confwin_attr(struct window *cwin) { cwin->h = (notify_bar())? row - 3 : row - 2; cwin->w = col; cwin->x = cwin->y = 0; } /* * Create a configuration window and initialize status and notification bar * (useful in case of window resize). */ void custom_confwin_init(struct window *confwin, const char *label) { if (confwin->p) { erase_window_part(confwin->p, confwin->x, confwin->y, confwin->x + confwin->w, confwin->y + confwin->h); delwin(confwin->p); } wins_get_config(); set_confwin_attr(confwin); confwin->p = newwin(confwin->h, col, 0, 0); box(confwin->p, 0, 0); wins_show(confwin->p, label); delwin(win[STA].p); win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x); keypad(win[STA].p, TRUE); if (notify_bar()) { notify_reinit_bar(); notify_update_bar(); } } static void color_selection_bar(void) { static int bindings[] = { KEY_GENERIC_QUIT, KEY_GENERIC_SELECT, KEY_GENERIC_CANCEL, KEY_MOVE_UP, KEY_MOVE_DOWN, KEY_MOVE_LEFT, KEY_GENERIC_SELECT }; int bindings_size = ARRAY_SIZE(bindings); keys_display_bindings_bar(win[STA].p, bindings, bindings_size, 0, bindings_size); } /* * Used to display available colors in color configuration menu. * This is useful for window resizing. */ static void display_color_config(struct window *cwin, int *mark_fore, int *mark_back, int cursor, int theme_changed) { #define SIZE (2 * (NBUSERCOLORS + 1)) #define DEFAULTCOLOR 255 #define DEFAULTCOLOR_EXT -1 #define CURSOR (32 | A_REVERSE) #define MARK 88 const char *fore_txt = _("Foreground"); const char *back_txt = _("Background"); const char *default_txt = _("(terminal's default)"); const char *bar = " "; const char *box = "[ ]"; const unsigned Y = 3; const unsigned XOFST = 5; const unsigned YSPC = (cwin->h - 8) / (NBUSERCOLORS + 1); const unsigned BARSIZ = strlen(bar); const unsigned BOXSIZ = strlen(box); const unsigned XSPC = (cwin->w - 2 * BARSIZ - 2 * BOXSIZ - 6) / 3; const unsigned XFORE = XSPC; const unsigned XBACK = 2 * XSPC + BOXSIZ + XOFST + BARSIZ; enum { YPOS, XPOS, NBPOS }; unsigned i; int pos[SIZE][NBPOS]; short colr_fore, colr_back; int colr[SIZE] = { COLR_RED, COLR_GREEN, COLR_YELLOW, COLR_BLUE, COLR_MAGENTA, COLR_CYAN, COLR_DEFAULT, COLR_RED, COLR_GREEN, COLR_YELLOW, COLR_BLUE, COLR_MAGENTA, COLR_CYAN, COLR_DEFAULT }; for (i = 0; i < NBUSERCOLORS + 1; i++) { pos[i][YPOS] = Y + YSPC * (i + 1); pos[NBUSERCOLORS + i + 1][YPOS] = Y + YSPC * (i + 1); pos[i][XPOS] = XFORE; pos[NBUSERCOLORS + i + 1][XPOS] = XBACK; } if (colorize) { if (theme_changed) { pair_content(colr[*mark_fore], &colr_fore, 0L); if (colr_fore == 255) colr_fore = -1; pair_content(colr[*mark_back], &colr_back, 0L); if (colr_back == 255) colr_back = -1; init_pair(COLR_CUSTOM, colr_fore, colr_back); } else { /* Retrieve the actual color theme. */ pair_content(COLR_CUSTOM, &colr_fore, &colr_back); if ((colr_fore == DEFAULTCOLOR) || (colr_fore == DEFAULTCOLOR_EXT)) { *mark_fore = NBUSERCOLORS; } else { for (i = 0; i < NBUSERCOLORS + 1; i++) if (colr_fore == colr[i]) *mark_fore = i; } if ((colr_back == DEFAULTCOLOR) || (colr_back == DEFAULTCOLOR_EXT)) { *mark_back = SIZE - 1; } else { for (i = 0; i < NBUSERCOLORS + 1; i++) if (colr_back == colr[NBUSERCOLORS + 1 + i]) *mark_back = NBUSERCOLORS + 1 + i; } } } /* color boxes */ for (i = 0; i < SIZE - 1; i++) { mvwaddstr(cwin->p, pos[i][YPOS], pos[i][XPOS], box); wattron(cwin->p, COLOR_PAIR(colr[i]) | A_REVERSE); mvwaddstr(cwin->p, pos[i][YPOS], pos[i][XPOS] + XOFST, bar); wattroff(cwin->p, COLOR_PAIR(colr[i]) | A_REVERSE); } /* Terminal's default color */ i = SIZE - 1; mvwaddstr(cwin->p, pos[i][YPOS], pos[i][XPOS], box); wattron(cwin->p, COLOR_PAIR(colr[i])); mvwaddstr(cwin->p, pos[i][YPOS], pos[i][XPOS] + XOFST, bar); wattroff(cwin->p, COLOR_PAIR(colr[i])); mvwaddstr(cwin->p, pos[NBUSERCOLORS][YPOS] + 1, pos[NBUSERCOLORS][XPOS] + XOFST, default_txt); mvwaddstr(cwin->p, pos[SIZE - 1][YPOS] + 1, pos[SIZE - 1][XPOS] + XOFST, default_txt); custom_apply_attr(cwin->p, ATTR_HIGHEST); mvwaddstr(cwin->p, Y, XFORE + XOFST, fore_txt); mvwaddstr(cwin->p, Y, XBACK + XOFST, back_txt); custom_remove_attr(cwin->p, ATTR_HIGHEST); if (colorize) { mvwaddch(cwin->p, pos[*mark_fore][YPOS], pos[*mark_fore][XPOS] + 1, MARK); mvwaddch(cwin->p, pos[*mark_back][YPOS], pos[*mark_back][XPOS] + 1, MARK); } mvwaddch(cwin->p, pos[cursor][YPOS], pos[cursor][XPOS] + 1, CURSOR); color_selection_bar(); wnoutrefresh(win[STA].p); wnoutrefresh(cwin->p); wins_doupdate(); if (notify_bar()) notify_update_bar(); } /* Color theme configuration. */ void custom_color_config(void) { struct window conf_win; int ch, cursor, need_reset, theme_changed; int mark_fore, mark_back; const char *label = _("color theme"); conf_win.p = 0; custom_confwin_init(&conf_win, label); mark_fore = NBUSERCOLORS; mark_back = SIZE - 1; cursor = 0; theme_changed = 0; display_color_config(&conf_win, &mark_fore, &mark_back, cursor, theme_changed); clear(); while ((ch = keys_getch(win[KEY].p, NULL, NULL)) != KEY_GENERIC_QUIT) { need_reset = 0; theme_changed = 0; switch (ch) { case KEY_GENERIC_SELECT: colorize = 1; need_reset = 1; theme_changed = 1; if (cursor > NBUSERCOLORS) mark_back = cursor; else mark_fore = cursor; break; case KEY_MOVE_DOWN: if (cursor < SIZE - 1) ++cursor; break; case KEY_MOVE_UP: if (cursor > 0) --cursor; break; case KEY_MOVE_LEFT: if (cursor > NBUSERCOLORS) cursor -= (NBUSERCOLORS + 1); break; case KEY_MOVE_RIGHT: if (cursor <= NBUSERCOLORS) cursor += (NBUSERCOLORS + 1); break; case KEY_GENERIC_CANCEL: colorize = 0; need_reset = 1; break; } if (resize) { resize = 0; endwin(); wins_refresh(); curs_set(0); need_reset = 1; } if (need_reset) custom_confwin_init(&conf_win, label); display_color_config(&conf_win, &mark_fore, &mark_back, cursor, theme_changed); } delwin(conf_win.p); } enum { COMPACT_PANELS, DEFAULT_PANEL, AUTO_SAVE, AUTO_GC, PERIODIC_SAVE, CONFIRM_QUIT, CONFIRM_DELETE, SYSTEM_DIAGS, PROGRESS_BAR, FIRST_DAY_OF_WEEK, OUTPUT_DATE_FMT, INPUT_DATE_FMT, NB_OPTIONS }; /* Prints the general options. */ static void print_general_option(int i, WINDOW *win, int y, int hilt, void *cb_data) { const int XPOS = 1; char *opt[NB_OPTIONS] = { "appearance.compactpanels = ", "appearance.defaultpanel = ", "general.autosave = ", "general.autogc = ", "general.periodicsave = ", "general.confirmquit = ", "general.confirmdelete = ", "general.systemdialogs = ", "general.progressbar = ", "general.firstdayofweek = ", "format.outputdate = ", "format.inputdate = " }; const char *panel; if (hilt) custom_apply_attr(win, ATTR_HIGHEST); mvwprintw(win, y, XPOS, "%s", opt[i]); switch (i) { case COMPACT_PANELS: print_bool_option_incolor(win, conf.compact_panels, y, XPOS + strlen(opt[COMPACT_PANELS])); mvwaddstr(win, y + XPOS, 1, _("(if set to YES, compact panels are used)")); break; case DEFAULT_PANEL: if (conf.default_panel == CAL) panel = _("Calendar"); else if (conf.default_panel == APP) panel = _("Appointments"); else panel = _("TODO"); custom_apply_attr(win, ATTR_HIGHEST); mvwaddstr(win, y, XPOS + strlen(opt[DEFAULT_PANEL]), panel); custom_remove_attr(win, ATTR_HIGHEST); mvwaddstr(win, y + 1, XPOS, _("(specifies the panel that is selected by default)")); break; case AUTO_SAVE: print_bool_option_incolor(win, conf.auto_save, y, XPOS + strlen(opt[AUTO_SAVE])); mvwaddstr(win, y + XPOS, 1, _("(if set to YES, automatic save is done when quitting)")); break; case AUTO_GC: print_bool_option_incolor(win, conf.auto_gc, y, XPOS + strlen(opt[AUTO_GC])); mvwaddstr(win, y + 1, XPOS, _("(run the garbage collector when quitting)")); break; case PERIODIC_SAVE: custom_apply_attr(win, ATTR_HIGHEST); mvwprintw(win, y, XPOS + strlen(opt[PERIODIC_SAVE]), "%d", conf.periodic_save); custom_remove_attr(win, ATTR_HIGHEST); mvwaddstr(win, y + 1, XPOS, _("(if not null, automatically save data every 'periodic_save' " "minutes)")); break; case CONFIRM_QUIT: print_bool_option_incolor(win, conf.confirm_quit, y, XPOS + strlen(opt[CONFIRM_QUIT])); mvwaddstr(win, y + 1, XPOS, _("(if set to YES, confirmation is required before quitting)")); break; case CONFIRM_DELETE: print_bool_option_incolor(win, conf.confirm_delete, y, XPOS + strlen(opt[CONFIRM_DELETE])); mvwaddstr(win, y + 1, XPOS, _("(if set to YES, confirmation is required " "before deleting an event)")); break; case SYSTEM_DIAGS: print_bool_option_incolor(win, conf.system_dialogs, y, XPOS + strlen(opt[SYSTEM_DIAGS])); mvwaddstr(win, y + 1, XPOS, _("(if set to YES, messages about loaded " "and saved data will be displayed)")); break; case PROGRESS_BAR: print_bool_option_incolor(win, conf.progress_bar, y, XPOS + strlen(opt[PROGRESS_BAR])); mvwaddstr(win, y + 1, XPOS, _("(if set to YES, progress bar will be displayed " "when saving data)")); break; case FIRST_DAY_OF_WEEK: custom_apply_attr(win, ATTR_HIGHEST); mvwaddstr(win, y, XPOS + strlen(opt[FIRST_DAY_OF_WEEK]), ui_calendar_week_begins_on_monday()? _("Monday") : _("Sunday")); custom_remove_attr(win, ATTR_HIGHEST); mvwaddstr(win, y + 1, XPOS, _("(specifies the first day of week in the calendar view)")); break; case OUTPUT_DATE_FMT: custom_apply_attr(win, ATTR_HIGHEST); mvwaddstr(win, y, XPOS + strlen(opt[OUTPUT_DATE_FMT]), conf.output_datefmt); custom_remove_attr(win, ATTR_HIGHEST); mvwaddstr(win, y + 1, XPOS, _("(Format of the date to be displayed in non-interactive mode)")); break; case INPUT_DATE_FMT: custom_apply_attr(win, ATTR_HIGHEST); mvwprintw(win, y, XPOS + strlen(opt[INPUT_DATE_FMT]), "%d", conf.input_datefmt); custom_remove_attr(win, ATTR_HIGHEST); mvwaddstr(win, y + 1, XPOS, _("(Format to be used when entering a date: ")); mvwprintw(win, y + 2, XPOS, " (1) %s, (2) %s, (3) %s, (4) %s)", datefmt_str[0], datefmt_str[1], datefmt_str[2], datefmt_str[3]); break; } if (hilt) custom_remove_attr(win, ATTR_HIGHEST); } static enum listbox_row_type general_option_row_type(int i, void *cb_data) { return LISTBOX_ROW_TEXT; } static int general_option_height(int i, void *cb_data) { if (i == 9) return 4; else return 3; } static void general_option_edit(int i) { const char *number_str = _("Enter an option number to change its value"); const char *keys = _("(Press '^P' or '^N' to move up or down, 'Q' to quit)"); const char *output_datefmt_str = _("Enter the date format (see 'man 3 strftime' for possible formats) "); const char *input_datefmt_prefix = _("Enter the date format: "); const char *periodic_save_str = _("Enter the delay, in minutes, between automatic saves (0 to disable) "); int val; char *buf; buf = mem_malloc(BUFSIZ); buf[0] = '\0'; switch (i) { case COMPACT_PANELS: conf.compact_panels = !conf.compact_panels; resize = 1; break; case DEFAULT_PANEL: if (conf.default_panel == TOD) conf.default_panel = CAL; else conf.default_panel++; break; case AUTO_SAVE: conf.auto_save = !conf.auto_save; break; case AUTO_GC: conf.auto_gc = !conf.auto_gc; break; case PERIODIC_SAVE: status_mesg(periodic_save_str, ""); if (updatestring(win[STA].p, &buf, 0, 1) == 0) { val = atoi(buf); if (val >= 0) conf.periodic_save = val; if (conf.periodic_save > 0) io_start_psave_thread(); else if (conf.periodic_save == 0) io_stop_psave_thread(); } status_mesg(number_str, keys); break; case CONFIRM_QUIT: conf.confirm_quit = !conf.confirm_quit; break; case CONFIRM_DELETE: conf.confirm_delete = !conf.confirm_delete; break; case SYSTEM_DIAGS: conf.system_dialogs = !conf.system_dialogs; break; case PROGRESS_BAR: conf.progress_bar = !conf.progress_bar; break; case FIRST_DAY_OF_WEEK: ui_calendar_change_first_day_of_week(); break; case OUTPUT_DATE_FMT: status_mesg(output_datefmt_str, ""); strncpy(buf, conf.output_datefmt, strlen(conf.output_datefmt) + 1); if (updatestring(win[STA].p, &buf, 0, 1) == 0) { strncpy(conf.output_datefmt, buf, strlen(buf) + 1); } status_mesg(number_str, keys); break; case INPUT_DATE_FMT: val = status_ask_simplechoice(input_datefmt_prefix, datefmt_str, DATE_FORMATS); if (val != -1) conf.input_datefmt = val; break; } free(buf); } /* General configuration. */ void custom_general_config(void) { static int bindings[] = { KEY_GENERIC_QUIT, KEY_MOVE_UP, KEY_MOVE_DOWN, KEY_EDIT_ITEM }; struct listbox lb; int ch; clear(); listbox_init(&lb, 0, 0, notify_bar() ? row - 3 : row - 2, col, _("general options"), general_option_row_type, general_option_height, print_general_option); listbox_load_items(&lb, 10); listbox_draw_deco(&lb, 0); listbox_display(&lb); wins_set_bindings(bindings, ARRAY_SIZE(bindings)); wins_status_bar(); wnoutrefresh(win[STA].p); wmove(win[STA].p, 0, 0); wins_doupdate(); while ((ch = keys_getch(win[KEY].p, NULL, NULL)) != KEY_GENERIC_QUIT) { switch (ch) { case KEY_MOVE_DOWN: listbox_sel_move(&lb, 1); break; case KEY_MOVE_UP: listbox_sel_move(&lb, -1); break; case KEY_EDIT_ITEM: general_option_edit(listbox_get_sel(&lb)); break; } if (resize) { resize = 0; wins_reset_noupdate(); listbox_resize(&lb, 0, 0, notify_bar() ? row - 3 : row - 2, col); listbox_draw_deco(&lb, 0); delwin(win[STA].p); win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x); keypad(win[STA].p, TRUE); if (notify_bar()) { notify_reinit_bar(); notify_update_bar(); } } listbox_display(&lb); wins_status_bar(); wnoutrefresh(win[STA].p); wmove(win[STA].p, 0, 0); wins_doupdate(); } listbox_delete(&lb); } static void print_key_incolor(WINDOW * win, const char *option, int pos_y, int pos_x) { const int color = ATTR_HIGHEST; RETURN_IF(!option, _("Undefined option!")); custom_apply_attr(win, color); mvwprintw(win, pos_y, pos_x, "%s ", option); custom_remove_attr(win, color); } static int print_keys_bindings(WINDOW * win, int selected_row, int selected_elm, int yoff) { const int XPOS = 1; const int EQUALPOS = 23; const int KEYPOS = 25; int noelm, action, y; noelm = y = 0; for (action = 0; action < NBKEYS; action++) { char *actionstr; int nbkeys; nbkeys = keys_action_count_keys(action); asprintf(&actionstr, "%s", keys_get_label(action)); if (action == selected_row) custom_apply_attr(win, ATTR_HIGHEST); mvwprintw(win, y, XPOS, "%s ", actionstr); mem_free(actionstr); mvwaddstr(win, y, EQUALPOS, "="); if (nbkeys == 0) mvwaddstr(win, y, KEYPOS, _("undefined")); if (action == selected_row) custom_remove_attr(win, ATTR_HIGHEST); if (nbkeys > 0) { if (action == selected_row) { const char *key; int pos; pos = KEYPOS; while ((key = keys_action_nkey(action, noelm)) != NULL) { if (noelm == selected_elm) print_key_incolor(win, key, y, pos); else mvwprintw(win, y, pos, "%s ", key); noelm++; pos += strlen(key) + 1; } } else { mvwaddstr(win, y, KEYPOS, keys_action_allkeys(action)); } } y += yoff; } return noelm; } static void custom_keys_config_bar(void) { static int bindings[] = { KEY_GENERIC_QUIT, KEY_GENERIC_HELP, KEY_ADD_ITEM, KEY_DEL_ITEM, KEY_MOVE_UP, KEY_MOVE_DOWN, KEY_MOVE_LEFT, KEY_MOVE_RIGHT }; int bindings_size = ARRAY_SIZE(bindings); keys_display_bindings_bar(win[STA].p, bindings, bindings_size, 0, bindings_size); } void custom_keys_config(void) { struct scrollwin kwin; int selrow, selelm, firstrow, lastrow, nbrowelm, nbdisplayed; int keyval, used, not_recognized; const char *keystr; WINDOW *grabwin; const int LINESPERKEY = 2; const int LABELLINES = 3; clear(); nbdisplayed = ((notify_bar() ? row - 3 : row - 2) - LABELLINES) / LINESPERKEY; wins_scrollwin_init(&kwin, 0, 0, notify_bar() ? row - 3 : row - 2, col, _("keys configuration")); wins_scrollwin_set_linecount(&kwin, NBKEYS * LINESPERKEY); wins_scrollwin_draw_deco(&kwin, 0); custom_keys_config_bar(); selrow = selelm = 0; nbrowelm = print_keys_bindings(kwin.inner, selrow, selelm, LINESPERKEY); wins_scrollwin_display(&kwin); firstrow = 0; lastrow = firstrow + nbdisplayed - 1; for (;;) { int ch; ch = keys_getch(win[KEY].p, NULL, NULL); switch (ch) { case KEY_MOVE_UP: if (selrow > 0) { selrow--; selelm = 0; if (selrow == firstrow) { firstrow--; lastrow--; wins_scrollwin_up(&kwin, LINESPERKEY); } } break; case KEY_MOVE_DOWN: if (selrow < NBKEYS - 1) { selrow++; selelm = 0; if (selrow == lastrow) { firstrow++; lastrow++; wins_scrollwin_down(&kwin, LINESPERKEY); } } break; case KEY_MOVE_LEFT: if (selelm > 0) selelm--; break; case KEY_MOVE_RIGHT: if (selelm < nbrowelm - 1) selelm++; break; case KEY_GENERIC_HELP: keys_popup_info(selrow); break; case KEY_ADD_ITEM: #define WINROW 10 #define WINCOL 50 do { used = 0; grabwin = popup(WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2, _("Press the key you want to assign to:"), keys_get_label(selrow), 0); keyval = wgetch(grabwin); /* First check if this key would be recognized by calcurse. */ if (keys_str2int(keys_int2str(keyval)) == -1) { not_recognized = 1; WARN_MSG(_("This key is not yet recognized by calcurse, " "please choose another one.")); werase(kwin.inner); nbrowelm = print_keys_bindings(kwin.inner, selrow, selelm, LINESPERKEY); wins_scrollwin_display(&kwin); continue; } else { not_recognized = 0; } /* Is the binding used by this action already? If so, just end the reassignment */ if (selrow == keys_get_action(keyval)) { delwin(grabwin); break; } used = keys_assign_binding(keyval, selrow); if (used) { enum key action; action = keys_get_action(keyval); WARN_MSG(_("This key is already in use for %s, " "please choose another one."), keys_get_label(action)); werase(kwin.inner); nbrowelm = print_keys_bindings(kwin.inner, selrow, selelm, LINESPERKEY); wins_scrollwin_display(&kwin); } delwin(grabwin); } while (used || not_recognized); nbrowelm++; if (selelm < nbrowelm - 1) selelm++; #undef WINROW #undef WINCOL break; case KEY_DEL_ITEM: keystr = keys_action_nkey(selrow, selelm); keyval = keys_str2int(keystr); keys_remove_binding(keyval, selrow); nbrowelm--; if (selelm > 0 && selelm <= nbrowelm) selelm--; break; case KEY_GENERIC_QUIT: if (keys_check_missing_bindings() != 0) { WARN_MSG(_("Some actions do not have any associated " "key bindings!")); } wins_scrollwin_delete(&kwin); return; } custom_keys_config_bar(); werase(kwin.inner); nbrowelm = print_keys_bindings(kwin.inner, selrow, selelm, LINESPERKEY); wins_scrollwin_display(&kwin); } } void custom_config_main(void) { static int bindings[] = { KEY_GENERIC_QUIT, KEY_CONFIGMENU_GENERAL, KEY_CONFIGMENU_LAYOUT, KEY_CONFIGMENU_SIDEBAR, KEY_CONFIGMENU_COLOR, KEY_CONFIGMENU_NOTIFY, KEY_CONFIGMENU_KEYS }; const char *no_color_support = _("Sorry, colors are not supported by your terminal\n" "(Press [ENTER] to continue)"); int ch; int old_layout; wins_set_bindings(bindings, ARRAY_SIZE(bindings)); wins_update_border(FLAG_ALL); wins_update_panels(FLAG_ALL); wins_status_bar(); if (notify_bar()) notify_update_bar(); wmove(win[STA].p, 0, 0); wins_doupdate(); while ((ch = wgetch(win[KEY].p)) != 'q') { switch (ch) { case 'C': case 'c': if (has_colors()) { custom_color_config(); } else { colorize = 0; wins_erase_status_bar(); mvwaddstr(win[STA].p, 0, 0, no_color_support); wgetch(win[KEY].p); } break; case 'L': case 'l': old_layout = wins_layout(); custom_layout_config(); if (wins_layout() != old_layout) wins_reset(); break; case 'G': case 'g': custom_general_config(); break; case 'N': case 'n': notify_config_bar(); break; case 'K': case 'k': custom_keys_config(); break; case 's': case 'S': custom_sidebar_config(); break; default: break; } wins_set_bindings(bindings, ARRAY_SIZE(bindings)); wins_update_border(FLAG_ALL); wins_update_panels(FLAG_ALL); wins_status_bar(); if (notify_bar()) notify_update_bar(); wmove(win[STA].p, 0, 0); wins_doupdate(); } } calcurse-4.0.0/src/llist.h0000644000175000017500000001047612472326722012343 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ /* Linked lists. */ typedef struct llist_item llist_item_t; struct llist_item { struct llist_item *next; void *data; }; typedef struct llist llist_t; struct llist { struct llist_item *head; struct llist_item *tail; }; typedef int (*llist_fn_cmp_t) (void *, void *); typedef int (*llist_fn_match_t) (void *, void *); typedef void (*llist_fn_free_t) (void *); /* Initialization and deallocation. */ void llist_init(llist_t *); void llist_free(llist_t *); void llist_free_inner(llist_t *, llist_fn_free_t); #define LLIST_INIT(l) llist_init(l) #define LLIST_FREE(l) llist_free(l) #define LLIST_FREE_INNER(l, fn_free) \ llist_free_inner(l, (llist_fn_free_t)fn_free) /* Retrieving list items. */ llist_item_t *llist_first(llist_t *); llist_item_t *llist_nth(llist_t *, int); llist_item_t *llist_next(llist_item_t *); llist_item_t *llist_next_filter(llist_item_t *, void *, llist_fn_match_t); llist_item_t *llist_find_first(llist_t *, void *, llist_fn_match_t); llist_item_t *llist_find_next(llist_item_t *, void *, llist_fn_match_t); llist_item_t *llist_find_nth(llist_t *, int, void *, llist_fn_match_t); #define LLIST_FIRST(l) llist_first(l) #define LLIST_NTH(l, n) llist_nth(l, n) #define LLIST_NEXT(i) llist_next(i) #define LLIST_NEXT_FILTER(i, data, fn_match) \ llist_next_filter(i, data, (llist_fn_match_t)fn_match) #define LLIST_FIND_FIRST(l, data, fn_match) \ llist_find_first(l, data, (llist_fn_match_t)fn_match) #define LLIST_FIND_NEXT(i, data, fn_match) \ llist_find_next(i, data, (llist_fn_match_t)fn_match) #define LLIST_FIND_NTH(l, n, data, fn_match) \ llist_find_nth(l, n, data, (llist_fn_match_t)fn_match) #define LLIST_FOREACH(l, i) for (i = LLIST_FIRST (l); i; i = LLIST_NEXT (i)) #define LLIST_FIND_FOREACH(l, data, fn_match, i) \ for (i = LLIST_FIND_FIRST (l, data, fn_match); i; \ i = LLIST_FIND_NEXT (i, data, fn_match)) #define LLIST_FIND_FOREACH_CONT(l, data, fn_match, i) \ for (i = LLIST_FIND_FIRST (l, data, fn_match); i; \ i = LLIST_NEXT_FILTER (i, data, fn_match)) /* Accessing list item data. */ void *llist_get_data(llist_item_t *); #define LLIST_GET_DATA(i) llist_get_data(i) /* List manipulation. */ void llist_add(llist_t *, void *); void llist_add_sorted(llist_t *, void *, llist_fn_cmp_t); void llist_remove(llist_t *, llist_item_t *); #define LLIST_ADD(l, data) llist_add(l, data) #define LLIST_ADD_SORTED(l, data, fn_cmp) \ llist_add_sorted(l, data, (llist_fn_cmp_t)fn_cmp) #define LLIST_REMOVE(l, i) llist_remove(l, i) calcurse-4.0.0/src/sigs.c0000644000175000017500000000716612472326722012156 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #ifndef _BSD_SOURCE /* Needed for SIGWINCH on OpenBSD. */ #define _BSD_SOURCE #endif #ifndef __BSD_VISIBLE /* Needed for SIGWINCH on FreeBSD. */ #define __BSD_VISIBLE 1 #endif #ifndef _DARWIN_C_SOURCE /* Needed for SIGWINCH on Darwin. */ #define _DARWIN_C_SOURCE 1 #endif #include #include #include #include #include #include #include "calcurse.h" #ifndef WAIT_MYPGRP #define WAIT_MYPGRP 0 #endif /* * General signal handling routine. * Catch return values from children (user-defined notification commands). * This is needed to avoid zombie processes running on system. * Also catch CTRL-C (SIGINT), and SIGWINCH to resize screen automatically. */ static void generic_hdlr(int sig) { switch (sig) { case SIGCHLD: while (waitpid(WAIT_MYPGRP, NULL, WNOHANG) > 0) ; break; case SIGWINCH: resize = 1; clearok(curscr, TRUE); ungetch(KEY_RESIZE); break; case SIGTERM: if (unlink(path_cpid) != 0) { EXIT(_("Could not remove calcurse lock file: %s\n"), strerror(errno)); } exit(EXIT_SUCCESS); break; case SIGUSR1: want_reload = 1; ungetch(KEY_RESIZE); break; } } unsigned sigs_set_hdlr(int sig, void (*handler) (int)) { struct sigaction sa; memset(&sa, 0, sizeof sa); sigemptyset(&sa.sa_mask); sa.sa_handler = handler; sa.sa_flags = 0; if (sigaction(sig, &sa, NULL) == -1) { ERROR_MSG(_("Error setting signal #%d : %s\n"), sig, strerror(errno)); return 0; } return 1; } /* Signal handling init. */ void sigs_init() { if (!sigs_set_hdlr(SIGCHLD, generic_hdlr) || !sigs_set_hdlr(SIGWINCH, generic_hdlr) || !sigs_set_hdlr(SIGTERM, generic_hdlr) || !sigs_set_hdlr(SIGUSR1, generic_hdlr) || !sigs_set_hdlr(SIGINT, SIG_IGN)) exit_calcurse(1); } /* Ignore SIGWINCH and SIGTERM signals. */ void sigs_ignore(void) { sigs_set_hdlr(SIGWINCH, SIG_IGN); sigs_set_hdlr(SIGTERM, SIG_IGN); } /* No longer ignore SIGWINCH and SIGTERM signals. */ void sigs_unignore(void) { sigs_set_hdlr(SIGWINCH, generic_hdlr); sigs_set_hdlr(SIGTERM, generic_hdlr); } calcurse-4.0.0/src/keys.c0000644000175000017500000004417412472326722012164 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include "calcurse.h" #define MAXKEYVAL KEY_MAX /* ncurses defines KEY_MAX as maximum key value */ struct keydef_s { const char *label; const char *binding; const char *sb_label; }; static llist_t keys[NBKEYS]; static enum key actions[MAXKEYVAL]; #define gettext_noop(s) s static struct keydef_s keydef[NBKEYS] = { { "generic-cancel", "ESC", gettext_noop("Cancel") }, { "generic-select", "SPC", gettext_noop("Select") }, { "generic-credits", "@", gettext_noop("Credits") }, { "generic-help", "?", gettext_noop("Help") }, { "generic-quit", "q Q", gettext_noop("Quit") }, { "generic-save", "s S C-s", gettext_noop("Save") }, { "generic-reload", "R", gettext_noop("Reload") }, { "generic-copy", "c", gettext_noop("Copy") }, { "generic-paste", "p C-v", gettext_noop("Paste") }, { "generic-change-view", "TAB", gettext_noop("Chg Win") }, { "generic-import", "i I", gettext_noop("Import") }, { "generic-export", "x X", gettext_noop("Export") }, { "generic-goto", "g G", gettext_noop("Go to") }, { "generic-other-cmd", "o O", gettext_noop("OtherCmd") }, { "generic-config-menu", "C", gettext_noop("Config") }, { "generic-redraw", "C-r", gettext_noop("Redraw") }, { "generic-add-appt", "C-a", gettext_noop("Add Appt") }, { "generic-add-todo", "C-t", gettext_noop("Add Todo") }, { "generic-prev-day", "T C-h", gettext_noop("-1 Day") }, { "generic-next-day", "t C-l", gettext_noop("+1 Day") }, { "generic-prev-week", "W C-k", gettext_noop("-1 Week") }, { "generic-next-week", "w C-j", gettext_noop("+1 Week") }, { "generic-prev-month", "M", gettext_noop("-1 Month") }, { "generic-next-month", "m", gettext_noop("+1 Month") }, { "generic-prev-year", "Y", gettext_noop("-1 Year") }, { "generic-next-year", "y", gettext_noop("+1 Year") }, { "generic-scroll-down", "C-n", gettext_noop("Nxt View") }, { "generic-scroll-up", "C-p", gettext_noop("Prv View") }, { "generic-goto-today", "C-g", gettext_noop("Today") }, { "generic-command", ":", gettext_noop("Command") }, { "move-right", "l L RGT", gettext_noop("Right") }, { "move-left", "h H LFT", gettext_noop("Left") }, { "move-down", "j J DWN", gettext_noop("Down") }, { "move-up", "k K UP", gettext_noop("Up") }, { "start-of-week", "0", gettext_noop("beg Week") }, { "end-of-week", "$", gettext_noop("end Week") }, { "add-item", "a A", gettext_noop("Add Item") }, { "del-item", "d D", gettext_noop("Del Item") }, { "edit-item", "e E", gettext_noop("Edit Itm") }, { "view-item", "v V", gettext_noop("View") }, { "pipe-item", "|", gettext_noop("Pipe") }, { "flag-item", "!", gettext_noop("Flag Itm") }, { "repeat", "r", gettext_noop("Repeat") }, { "edit-note", "n N", gettext_noop("EditNote") }, { "view-note", ">", gettext_noop("ViewNote") }, { "raise-priority", "+", gettext_noop("Prio.+") }, { "lower-priority", "-", gettext_noop("Prio.-") } }; static void dump_intro(FILE * fd) { const char *intro = _("#\n" "# Calcurse keys configuration file\n#\n" "# This file sets the keybindings used by Calcurse.\n" "# Lines beginning with \"#\" are comments, and ignored by Calcurse.\n" "# To assign a keybinding to an action, this file must contain a line\n" "# with the following syntax:\n#\n" "# ACTION KEY1 KEY2 ... KEYn\n#\n" "# Where ACTION is what will be performed when KEY1, KEY2, ..., or KEYn\n" "# will be pressed.\n" "#\n" "# To define bindings which use the CONTROL key, prefix the key with " "'C-'.\n" "# The escape, space bar and horizontal Tab key can be specified using\n" "# the 'ESC', 'SPC' and 'TAB' keyword, respectively.\n" "# Arrow keys can also be specified with the UP, DWN, LFT, RGT keywords.\n" "# Last, Home and End keys can be assigned using 'KEY_HOME' and 'KEY_END'\n" "# keywords." "\n#\n" "# A description of what each ACTION keyword is used for is available\n" "# from calcurse online configuration menu.\n"); fprintf(fd, "%s\n", intro); } void keys_init(void) { int i; for (i = 0; i < MAXKEYVAL; i++) actions[i] = KEY_UNDEF; for (i = 0; i < NBKEYS; i++) LLIST_INIT(&keys[i]); } static void key_free(char *s) { mem_free(s); } void keys_free(void) { int i; for (i = 0; i < NBKEYS; i++) { LLIST_FREE_INNER(&keys[i], key_free); LLIST_FREE(&keys[i]); } } void keys_dump_defaults(char *file) { FILE *fd; int i; fd = fopen(file, "w"); EXIT_IF(fd == NULL, _("FATAL ERROR: could not create default keys file.")); dump_intro(fd); for (i = 0; i < NBKEYS; i++) fprintf(fd, "%s %s\n", keydef[i].label, keydef[i].binding); file_close(fd, __FILE_POS__); } const char *keys_get_label(enum key key) { EXIT_IF(key < 0 || key > NBKEYS, _("FATAL ERROR: key value out of bounds")); return keydef[key].label; } enum key keys_get_action(int pressed) { if (pressed < 0 || pressed > MAXKEYVAL) return -1; else return actions[pressed]; } enum key keys_getch(WINDOW * win, int *count, int *reg) { int ch = '0'; if (count && reg) { *count = 0; *reg = 0; do { *count = *count * 10 + ch - '0'; ch = wgetch(win); } while ((ch == '0' && *count > 0) || (ch >= '1' && ch <= '9')); if (*count == 0) *count = 1; if (ch == '"') { ch = wgetch(win); if (ch >= '1' && ch <= '9') { *reg = ch - '1' + 1; } else if (ch >= 'a' && ch <= 'z') { *reg = ch - 'a' + 10; } else if (ch == '_') { *reg = REG_BLACK_HOLE; } ch = wgetch(win); } } else { ch = wgetch(win); } switch (ch) { case KEY_RESIZE: return KEY_RESIZE; default: return keys_get_action(ch); } } static void add_key_str(enum key action, int key) { if (action > NBKEYS) return; LLIST_ADD(&keys[action], mem_strdup(keys_int2str(key))); } int keys_assign_binding(int key, enum key action) { if (key < 0 || key > MAXKEYVAL || actions[key] != KEY_UNDEF) { return 1; } else { actions[key] = action; add_key_str(action, key); } return 0; } static void del_key_str(enum key action, int key) { llist_item_t *i; char oldstr[BUFSIZ]; if (action > NBKEYS) return; strncpy(oldstr, keys_int2str(key), BUFSIZ); LLIST_FOREACH(&keys[action], i) { if (strcmp(LLIST_GET_DATA(i), oldstr) == 0) { LLIST_REMOVE(&keys[action], i); return; } } } void keys_remove_binding(int key, enum key action) { if (key >= 0 && key <= MAXKEYVAL) { actions[key] = KEY_UNDEF; del_key_str(action, key); } } int keys_str2int(const char *key) { const char CONTROL_KEY[] = "C-"; const char TAB_KEY[] = "TAB"; const char SPACE_KEY[] = "SPC"; const char ESCAPE_KEY[] = "ESC"; const char CURSES_KEY_UP[] = "UP"; const char CURSES_KEY_DOWN[] = "DWN"; const char CURSES_KEY_LEFT[] = "LFT"; const char CURSES_KEY_RIGHT[] = "RGT"; const char CURSES_KEY_HOME[] = "KEY_HOME"; const char CURSES_KEY_END[] = "KEY_END"; if (!key) return -1; if (strlen(key) == 1) { return (int)key[0]; } else { if (key[0] == '^') return CTRL((int)key[1]); else if (!strncmp (key, CONTROL_KEY, sizeof(CONTROL_KEY) - 1)) return CTRL((int)key[sizeof(CONTROL_KEY) - 1]); else if (!strcmp(key, TAB_KEY)) return TAB; else if (!strcmp(key, ESCAPE_KEY)) return ESCAPE; else if (!strcmp(key, SPACE_KEY)) return SPACE; else if (!strcmp(key, CURSES_KEY_UP)) return KEY_UP; else if (!strcmp(key, CURSES_KEY_DOWN)) return KEY_DOWN; else if (!strcmp(key, CURSES_KEY_LEFT)) return KEY_LEFT; else if (!strcmp(key, CURSES_KEY_RIGHT)) return KEY_RIGHT; else if (!strcmp(key, CURSES_KEY_HOME)) return KEY_HOME; else if (!strcmp(key, CURSES_KEY_END)) return KEY_END; else return -1; } } const char *keys_int2str(int key) { switch (key) { case TAB: return "TAB"; case SPACE: return "SPC"; case ESCAPE: return "ESC"; case KEY_UP: return "UP"; case KEY_DOWN: return "DWN"; case KEY_LEFT: return "LFT"; case KEY_RIGHT: return "RGT"; case KEY_HOME: return "KEY_HOME"; case KEY_END: return "KEY_END"; default: return (char *)keyname(key); } } int keys_action_count_keys(enum key action) { llist_item_t *i; int n = 0; LLIST_FOREACH(&keys[action], i) n++; return n; } const char *keys_action_firstkey(enum key action) { const char *s = LLIST_GET_DATA(LLIST_FIRST(&keys[action])); return (s != NULL) ? s : "XXX"; } const char *keys_action_nkey(enum key action, int keynum) { return LLIST_GET_DATA(LLIST_NTH(&keys[action], keynum)); } char *keys_action_allkeys(enum key action) { llist_item_t *i; static char keystr[BUFSIZ]; const char *CHAR_SPACE = " "; if (!LLIST_FIRST(&keys[action])) return NULL; keystr[0] = '\0'; LLIST_FOREACH(&keys[action], i) { const int MAXLEN = sizeof(keystr) - 1 - strlen(keystr); strncat(keystr, LLIST_GET_DATA(i), MAXLEN - 1); strncat(keystr, CHAR_SPACE, 1); } return keystr; } /* Need this to display keys properly inside status bar. */ static char *keys_format_label(char *key, int keylen) { static char fmtkey[BUFSIZ]; const int len = strlen(key); const char dot = '.'; int i; if (keylen > BUFSIZ) return NULL; memset(fmtkey, 0, sizeof(fmtkey)); if (len == 0) { strncpy(fmtkey, "?", sizeof(fmtkey)); } else if (len <= keylen) { for (i = 0; i < keylen - len; i++) fmtkey[i] = ' '; strncat(fmtkey, key, keylen); } else { for (i = 0; i < keylen - 1; i++) fmtkey[i] = key[i]; fmtkey[keylen - 1] = dot; } return fmtkey; } void keys_display_bindings_bar(WINDOW * win, int *bindings, int count, int page_base, int page_size) { page_size = MIN(page_size, count - page_base); /* Padding between two key bindings. */ const int padding = (col * 2) / page_size - (KEYS_KEYLEN + KEYS_LABELEN + 1); /* Total length of a key binding (including padding). */ const int cmd_len = KEYS_KEYLEN + KEYS_LABELEN + 1 + padding; int i; wins_erase_status_bar(); for (i = 0; i < page_size && page_base + i < count; i++) { /* Location of key and label. */ const int key_pos_x = (i / 2) * cmd_len; const int key_pos_y = i % 2; const int label_pos_x = key_pos_x + KEYS_KEYLEN + 1; const int label_pos_y = key_pos_y; char key[KEYS_KEYLEN + 1], *fmtkey; int binding_key; if (i < page_size - 1 || page_base + i == count - 1) binding_key = bindings[page_base + i]; else binding_key = KEY_GENERIC_OTHER_CMD; const char *label; if (binding_key < NBKEYS) { strncpy(key, keys_action_firstkey(binding_key), KEYS_KEYLEN); key[KEYS_KEYLEN] = '\0'; label = gettext(keydef[binding_key].sb_label); } else { switch (binding_key) { case KEY_CONFIGMENU_GENERAL: strcpy(key, "g"); label = _("General"); break; case KEY_CONFIGMENU_LAYOUT: strcpy(key, "l"); label = _("Layout"); break; case KEY_CONFIGMENU_SIDEBAR: strcpy(key, "s"); label = _("Sidebar"); break; case KEY_CONFIGMENU_COLOR: strcpy(key, "c"); label = _("Color"); break; case KEY_CONFIGMENU_NOTIFY: strcpy(key, "n"); label = _("Notify"); break; case KEY_CONFIGMENU_KEYS: strcpy(key, "k"); label = _("Keys"); break; default: strcpy(key, "?"); label = _("Unknown"); break; } } custom_apply_attr(win, ATTR_HIGHEST); fmtkey = keys_format_label(key, KEYS_KEYLEN); mvwaddstr(win, key_pos_y, key_pos_x, fmtkey); custom_remove_attr(win, ATTR_HIGHEST); mvwaddstr(win, label_pos_y, label_pos_x, label); } wnoutrefresh(win); } /* * Display information about the given key. * (could not add the keys descriptions to keydef variable, because of i18n). */ void keys_popup_info(enum key key) { char *info[NBKEYS]; WINDOW *infowin; info[KEY_GENERIC_CANCEL] = _("Cancel the ongoing action."); info[KEY_GENERIC_SELECT] = _("Select the highlighted item."); info[KEY_GENERIC_CREDITS] = _("Print general information about calcurse's authors, license, etc."); info[KEY_GENERIC_HELP] = _("Display hints whenever some help screens are available."); info[KEY_GENERIC_QUIT] = _("Exit from the current menu, or quit calcurse."); info[KEY_GENERIC_SAVE] = _("Save calcurse data."); info[KEY_GENERIC_RELOAD] = _("Reload appointments and todo items."); info[KEY_GENERIC_COPY] = _("Copy the item that is currently selected."); info[KEY_GENERIC_PASTE] = _("Paste an item at the current position."); info[KEY_GENERIC_CHANGE_VIEW] = _("Select next panel in calcurse main screen."); info[KEY_GENERIC_IMPORT] = _("Import data from an external file."); info[KEY_GENERIC_EXPORT] = _("Export data to a new file format."); info[KEY_GENERIC_GOTO] = _("Select the day to go to."); info[KEY_GENERIC_OTHER_CMD] = _("Show next possible actions inside status bar."); info[KEY_GENERIC_CONFIG_MENU] = _("Enter the configuration menu."); info[KEY_GENERIC_REDRAW] = _("Redraw calcurse's screen."); info[KEY_GENERIC_ADD_APPT] = _("Add an appointment, whichever panel is currently selected."); info[KEY_GENERIC_ADD_TODO] = _("Add a todo item, whichever panel is currently selected."); info[KEY_GENERIC_PREV_DAY] = _("Move to previous day in calendar, whichever panel is currently " "selected."); info[KEY_GENERIC_NEXT_DAY] = _("Move to next day in calendar, whichever panel is currently selected."); info[KEY_GENERIC_PREV_WEEK] = _("Move to previous week in calendar, whichever panel is currently " "selected"); info[KEY_GENERIC_NEXT_WEEK] = _("Move to next week in calendar, whichever panel is currently selected."); info[KEY_GENERIC_PREV_MONTH] = _("Move to previous month in calendar, whichever panel is currently " "selected"); info[KEY_GENERIC_NEXT_MONTH] = _("Move to next month in calendar, whichever panel is currently " "selected."); info[KEY_GENERIC_PREV_YEAR] = _("Move to previous year in calendar, whichever panel is currently " "selected"); info[KEY_GENERIC_NEXT_YEAR] = _("Move to next year in calendar, whichever panel is currently selected."); info[KEY_GENERIC_SCROLL_DOWN] = _("Scroll window down (e.g. when displaying text inside a popup window)."); info[KEY_GENERIC_SCROLL_UP] = _("Scroll window up (e.g. when displaying text inside a popup window)."); info[KEY_GENERIC_GOTO_TODAY] = _("Go to today, whichever panel is selected."); info[KEY_GENERIC_CMD] = _("Enter command mode."); info[KEY_MOVE_RIGHT] = _("Move to the right."); info[KEY_MOVE_LEFT] = _("Move to the left."); info[KEY_MOVE_DOWN] = _("Move down."); info[KEY_MOVE_UP] = _("Move up."); info[KEY_START_OF_WEEK] = _("Select the first day of the current week when inside the calendar " "panel."); info[KEY_END_OF_WEEK] = _("Select the last day of the current week when inside the calendar " "panel."); info[KEY_ADD_ITEM] = _("Add an item to the currently selected panel."); info[KEY_DEL_ITEM] = _("Delete the currently selected item."); info[KEY_EDIT_ITEM] = _("Edit the currently seleted item."); info[KEY_VIEW_ITEM] = _("Display the currently selected item inside a popup window."); info[KEY_FLAG_ITEM] = _("Flag the currently selected item as important."); info[KEY_REPEAT_ITEM] = _("Repeat an item"); info[KEY_PIPE_ITEM] = _("Pipe the currently selected item to an external program."); info[KEY_EDIT_NOTE] = _("Attach (or edit if one exists) a note to the currently selected item"); info[KEY_VIEW_NOTE] = _("View the note attached to the currently selected item."); info[KEY_RAISE_PRIORITY] = _("Raise a task priority inside the todo panel."); info[KEY_LOWER_PRIORITY] = _("Lower a task priority inside the todo panel."); if (key > NBKEYS) return; #define WINROW 10 #define WINCOL (col - 4) infowin = popup(WINROW, WINCOL, (row - WINROW) / 2, (col - WINCOL) / 2, keydef[key].label, info[key], 1); keys_getch(infowin, NULL, NULL); delwin(infowin); #undef WINROW #undef WINCOL } void keys_save_bindings(FILE * fd) { int i; char *action; EXIT_IF(fd == NULL, _("FATAL ERROR: null file pointer.")); dump_intro(fd); for (i = 0; i < NBKEYS; i++) { action = keys_action_allkeys(i); if (action) fprintf(fd, "%s %s\n", keydef[i].label, action); } } int keys_check_missing_bindings(void) { int i; for (i = 0; i < NBKEYS; i++) { if (!LLIST_FIRST(&keys[i])) return 1; } return 0; } void keys_fill_missing(void) { int i; for (i = 0; i < NBKEYS; i++) { if (!LLIST_FIRST(&keys[i])) { char *p, tmpbuf[BUFSIZ]; strncpy(tmpbuf, keydef[i].binding, BUFSIZ); p = tmpbuf; for (;;) { char key_ch[BUFSIZ]; while (*p == ' ') p++; if (sscanf(p, "%s", key_ch) == 1) { int ch, used; ch = keys_str2int(key_ch); used = keys_assign_binding(ch, i); if (used) WARN_MSG(_("When adding default key for \"%s\", " "\"%s\" was already assigned!"), keydef[i].label, key_ch); p += strlen(key_ch) + 1; } else { break; } } } } } calcurse-4.0.0/src/vars.c0000644000175000017500000001103412472326722012151 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include "calcurse.h" /* * variables to store window size */ int col = 0, row = 0; int resize = 0; /* variable to tell if the terminal supports color */ unsigned colorize = 0; /* Default background and foreground colors. */ int foreground, background; /* * To tell if curses interface was launched already or not (in that case * calcurse is running in command-line mode). * This is useful to konw how to display messages on the screen. */ enum ui_mode ui_mode = UI_CMDLINE; /* Don't save anything if this is set. */ int read_only = 0; /* Applications can trigger a reload by sending SIGUSR1. */ int want_reload = 0; /* Strings describing each input date format. */ const char *datefmt_str[DATE_FORMATS]; /* * variables to store calendar names */ int days[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; const char *monthnames[12] = { N_("January"), N_("February"), N_("March"), N_("April"), N_("May"), N_("June"), N_("July"), N_("August"), N_("September"), N_("October"), N_("November"), N_("December") }; const char *daynames[8] = { N_("Sun"), N_("Mon"), N_("Tue"), N_("Wed"), N_("Thu"), N_("Fri"), N_("Sat"), N_("Sun") }; /* * variables to store data path names, which are initialized in * io_init() */ char path_dir[] = ""; char path_todo[] = ""; char path_apts[] = ""; char path_conf[] = ""; char path_notes[] = ""; char path_keys[] = ""; char path_cpid[] = ""; char path_dpid[] = ""; char path_dmon_log[] = ""; /* Variable to store global configuration. */ struct conf conf; /* Variable to handle pads. */ struct pad apad; /* Variable to store notify-bar settings. */ struct nbar nbar; /* Variable to store daemon configuration. */ struct dmon_conf dmon; /* * Variables init */ void vars_init(void) { const char *ed, *pg, *mt; /* Variables for user configuration */ conf.confirm_quit = 1; conf.confirm_delete = 1; conf.auto_save = 1; conf.auto_gc = 0; conf.periodic_save = 0; conf.default_panel = CAL; conf.compact_panels = 0; conf.system_dialogs = 1; conf.progress_bar = 1; strncpy(conf.output_datefmt, "%D", 3); conf.input_datefmt = 1; datefmt_str[0] = _("mm/dd/yyyy"); datefmt_str[1] = _("dd/mm/yyyy"); datefmt_str[2] = _("yyyy/mm/dd"); datefmt_str[3] = _("yyyy-mm-dd"); /* Default external editor and pager */ ed = getenv("VISUAL"); if (ed == NULL || ed[0] == '\0') ed = getenv("EDITOR"); if (ed == NULL || ed[0] == '\0') ed = DEFAULT_EDITOR; conf.editor = ed; pg = getenv("PAGER"); if (pg == NULL || pg[0] == '\0') pg = DEFAULT_PAGER; conf.pager = pg; mt = getenv("MERGETOOL"); if (mt == NULL || mt[0] == '\0') mt = DEFAULT_MERGETOOL; conf.mergetool = mt; wins_set_layout(1); ui_calendar_set_first_day_of_week(MONDAY); /* Pad structure to scroll text inside the appointment panel */ apad.length = 1; apad.first_onscreen = 0; /* Attribute definitions for color and non-color terminals */ custom_init_attr(); /* Start at the current date */ ui_calendar_init_slctd_day(); } calcurse-4.0.0/src/mem.c0000644000175000017500000001526312472326722011764 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include "calcurse.h" #ifdef CALCURSE_MEMORY_DEBUG enum { BLK_STATE, BLK_SIZE, BLK_ID, EXTRA_SPACE_START }; #define EXTRA_SPACE_END 1 #define EXTRA_SPACE EXTRA_SPACE_START + EXTRA_SPACE_END #define MAGIC_ALLOC 0xda #define MAGIC_FREE 0xdf struct mem_blk { unsigned id, size; const char *pos; struct mem_blk *next; }; struct mem_stats { unsigned ncall, nalloc, nfree; struct mem_blk *blk; }; static struct mem_stats mstats; #endif /* CALCURSE_MEMORY_DEBUG */ void *xmalloc(size_t size) { void *p; EXIT_IF(size == 0, _("xmalloc: zero size")); p = malloc(size); EXIT_IF(p == NULL, _("xmalloc: out of memory")); return p; } void *xcalloc(size_t nmemb, size_t size) { void *p; EXIT_IF(nmemb == 0 || size == 0, _("xcalloc: zero size")); EXIT_IF(SIZE_MAX / nmemb < size, _("xcalloc: overflow")); p = calloc(nmemb, size); EXIT_IF(p == NULL, _("xcalloc: out of memory")); return p; } void *xrealloc(void *ptr, size_t nmemb, size_t size) { void *new_ptr; size_t new_size; new_size = nmemb * size; EXIT_IF(new_size == 0, _("xrealloc: zero size")); EXIT_IF(SIZE_MAX / nmemb < size, _("xrealloc: overflow")); new_ptr = realloc(ptr, new_size); EXIT_IF(new_ptr == NULL, _("xrealloc: out of memory")); return new_ptr; } char *xstrdup(const char *str) { size_t len; char *cp; len = strlen(str) + 1; cp = xmalloc(len); return strncpy(cp, str, len); } void xfree(void *p) { free(p); } #ifdef CALCURSE_MEMORY_DEBUG static unsigned stats_add_blk(size_t size, const char *pos) { struct mem_blk *o, **i; o = malloc(sizeof(*o)); EXIT_IF(o == NULL, _("could not allocate memory to store block info")); mstats.ncall++; o->pos = pos; o->size = (unsigned)size; o->next = 0; for (i = &mstats.blk; *i; i = &(*i)->next) ; o->id = mstats.ncall; *i = o; return o->id; } static void stats_del_blk(unsigned id) { struct mem_blk *o, **i; i = &mstats.blk; for (o = mstats.blk; o; o = o->next) { if (o->id == id) { *i = o->next; free(o); return; } i = &o->next; } EXIT(_("Block not found")); /* NOTREACHED */ } void *dbg_malloc(size_t size, const char *pos) { unsigned *buf; if (size == 0) return NULL; size = EXTRA_SPACE + (size + sizeof(unsigned) - 1) / sizeof(unsigned); buf = xmalloc(size * sizeof(unsigned)); buf[BLK_STATE] = MAGIC_ALLOC; /* state of the block */ buf[BLK_SIZE] = size; /* size of the block */ buf[BLK_ID] = stats_add_blk(size, pos); /* identify a block by its id */ buf[size - 1] = buf[BLK_ID]; /* mark at end of block */ mstats.nalloc += size; return (void *)(buf + EXTRA_SPACE_START); } void *dbg_calloc(size_t nmemb, size_t size, const char *pos) { void *buf; if (!nmemb || !size) return NULL; EXIT_IF(nmemb > SIZE_MAX / size, _("overflow at %s"), pos); size *= nmemb; if ((buf = dbg_malloc(size, pos)) == NULL) return NULL; memset(buf, 0, size); return buf; } void *dbg_realloc(void *ptr, size_t nmemb, size_t size, const char *pos) { unsigned *buf, old_size, new_size, cpy_size; if (ptr == NULL) return NULL; new_size = nmemb * size; if (new_size == 0) return NULL; EXIT_IF(nmemb > SIZE_MAX / size, _("overflow at %s"), pos); if ((buf = dbg_malloc(new_size, pos)) == NULL) return NULL; old_size = *((unsigned *)ptr - EXTRA_SPACE_START + BLK_SIZE); cpy_size = (old_size > new_size) ? new_size : old_size; memmove(buf, ptr, cpy_size); mem_free(ptr); return (void *)buf; } char *dbg_strdup(const char *s, const char *pos) { size_t size; char *buf; if (s == NULL) return NULL; size = strlen(s); if ((buf = dbg_malloc(size + 1, pos)) == NULL) return NULL; return strncpy(buf, s, size + 1); } void dbg_free(void *ptr, const char *pos) { unsigned *buf, size; EXIT_IF(ptr == NULL, _("dbg_free: null pointer at %s"), pos); buf = (unsigned *)ptr - EXTRA_SPACE_START; size = buf[BLK_SIZE]; EXIT_IF(buf[BLK_STATE] == MAGIC_FREE, _("block seems already freed at %s"), pos); EXIT_IF(buf[BLK_STATE] != MAGIC_ALLOC, _("corrupt block header at %s"), pos); EXIT_IF(buf[size - 1] != buf[BLK_ID], _("corrupt block end at %s, (end = %u, should be %d)"), pos, buf[size - 1], buf[BLK_ID]); buf[0] = MAGIC_FREE; stats_del_blk(buf[BLK_ID]); free(buf); mstats.nfree += size; } static void dump_block_info(struct mem_blk *blk) { if (blk == NULL) return; puts(_("---==== MEMORY BLOCK ====----------------\n")); printf(_(" id: %u\n"), blk->id); printf(_(" size: %u\n"), blk->size); printf(_(" allocated in: %s\n"), blk->pos); puts(_("-----------------------------------------\n")); } void mem_stats(void) { putchar('\n'); puts(_("+------------------------------+\n")); puts(_("| calcurse memory usage report |\n")); puts(_("+------------------------------+\n")); printf(_(" number of calls: %u\n"), mstats.ncall); printf(_(" allocated blocks: %u\n"), mstats.nalloc); printf(_(" unfreed blocks: %u\n"), mstats.nalloc - mstats.nfree); putchar('\n'); if (mstats.nfree < mstats.nalloc) { struct mem_blk *blk; for (blk = mstats.blk; blk; blk = blk->next) dump_block_info(blk); } } #endif /* CALCURSE_MEMORY_DEBUG */ calcurse-4.0.0/src/pcal.c0000644000175000017500000002237312472326722012125 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include "calcurse.h" /* Static functions used to add export functionalities. */ static void pcal_export_header(FILE *); static void pcal_export_recur_events(FILE *); static void pcal_export_events(FILE *); static void pcal_export_recur_apoints(FILE *); static void pcal_export_apoints(FILE *); static void pcal_export_todo(FILE *); static void pcal_export_footer(FILE *); /* Type definition for callbacks to export functions. */ typedef void (*cb_dump_t) (FILE *, long, long, char *); /* * Travel through each occurence of an item, and execute the given callback * (mainly used to export data). */ static void foreach_date_dump(const long date_end, struct rpt *rpt, llist_t * exc, long item_first_date, long item_dur, char *item_mesg, cb_dump_t cb_dump, FILE * stream) { long date, item_time; struct tm lt; time_t t; t = item_first_date; localtime_r(&t, <); lt.tm_hour = lt.tm_min = lt.tm_sec = 0; lt.tm_isdst = -1; date = mktime(<); item_time = item_first_date - date; while (date <= date_end && date <= rpt->until) { if (recur_item_inday (item_first_date, item_dur, exc, rpt->type, rpt->freq, rpt->until, date)) { (*cb_dump) (stream, date + item_time, item_dur, item_mesg); } switch (rpt->type) { case RECUR_DAILY: date = date_sec_change(date, 0, rpt->freq); break; case RECUR_WEEKLY: date = date_sec_change(date, 0, rpt->freq * WEEKINDAYS); break; case RECUR_MONTHLY: date = date_sec_change(date, rpt->freq, 0); break; case RECUR_YEARLY: date = date_sec_change(date, rpt->freq * 12, 0); break; default: EXIT(_("incoherent repetition type")); /* NOTREACHED */ break; } } } static void pcal_export_header(FILE * stream) { fputs("# calcurse pcal export\n", stream); fputs("\n# =======\n# options\n# =======\n", stream); fprintf(stream, "opt -A -K -l -m -F %s\n", ui_calendar_week_begins_on_monday()? "Monday" : "Sunday"); fputs("# Display week number (i.e. 1-52) on every Monday\n", stream); fprintf(stream, "all monday in all week %%w\n"); fputc('\n', stream); } static void pcal_export_footer(FILE * stream) { } /* Format and dump event data to a pcal formatted file. */ static void pcal_dump_event(FILE * stream, long event_date, long event_dur, char *event_mesg) { char pcal_date[BUFSIZ]; date_sec2date_fmt(event_date, "%b %d", pcal_date); fprintf(stream, "%s %s\n", pcal_date, event_mesg); } /* Format and dump appointment data to a pcal formatted file. */ static void pcal_dump_apoint(FILE * stream, long apoint_date, long apoint_dur, char *apoint_mesg) { char pcal_date[BUFSIZ], pcal_beg[BUFSIZ], pcal_end[BUFSIZ]; date_sec2date_fmt(apoint_date, "%b %d", pcal_date); date_sec2date_fmt(apoint_date, "%R", pcal_beg); date_sec2date_fmt(apoint_date + apoint_dur, "%R", pcal_end); fprintf(stream, "%s ", pcal_date); fprintf(stream, "(%s -> %s) %s\n", pcal_beg, pcal_end, apoint_mesg); } static void pcal_export_recur_events(FILE * stream) { llist_item_t *i; char pcal_date[BUFSIZ]; fputs("\n# =============", stream); fputs("\n# Recur. Events", stream); fputs("\n# =============\n", stream); fputs("# (pcal does not support from..until dates specification\n", stream); LLIST_FOREACH(&recur_elist, i) { struct recur_event *rev = LLIST_GET_DATA(i); if (rev->rpt->until == 0 && rev->rpt->freq == 1) { switch (rev->rpt->type) { case RECUR_DAILY: date_sec2date_fmt(rev->day, "%b %d", pcal_date); fprintf(stream, "all day on_or_after %s %s\n", pcal_date, rev->mesg); break; case RECUR_WEEKLY: date_sec2date_fmt(rev->day, "%a", pcal_date); fprintf(stream, "all %s on_or_after ", pcal_date); date_sec2date_fmt(rev->day, "%b %d", pcal_date); fprintf(stream, "%s %s\n", pcal_date, rev->mesg); break; case RECUR_MONTHLY: date_sec2date_fmt(rev->day, "%d", pcal_date); fprintf(stream, "day on all %s %s\n", pcal_date, rev->mesg); break; case RECUR_YEARLY: date_sec2date_fmt(rev->day, "%b %d", pcal_date); fprintf(stream, "%s %s\n", pcal_date, rev->mesg); break; default: EXIT(_("incoherent repetition type")); } } else { const long YEAR_START = ui_calendar_start_of_year(); const long YEAR_END = ui_calendar_end_of_year(); if (rev->day < YEAR_END && rev->day > YEAR_START) foreach_date_dump(YEAR_END, rev->rpt, &rev->exc, rev->day, 0, rev->mesg, (cb_dump_t) pcal_dump_event, stream); } } } static void pcal_export_events(FILE * stream) { llist_item_t *i; fputs("\n# ======\n# Events\n# ======\n", stream); LLIST_FOREACH(&eventlist, i) { struct event *ev = LLIST_TS_GET_DATA(i); pcal_dump_event(stream, ev->day, 0, ev->mesg); } fputc('\n', stream); } static void pcal_export_recur_apoints(FILE * stream) { llist_item_t *i; char pcal_date[BUFSIZ], pcal_beg[BUFSIZ], pcal_end[BUFSIZ]; fputs("\n# ==============", stream); fputs("\n# Recur. Apoints", stream); fputs("\n# ==============\n", stream); fputs("# (pcal does not support from..until dates specification\n", stream); LLIST_TS_FOREACH(&recur_alist_p, i) { struct recur_apoint *rapt = LLIST_TS_GET_DATA(i); if (rapt->rpt->until == 0 && rapt->rpt->freq == 1) { date_sec2date_fmt(rapt->start, "%R", pcal_beg); date_sec2date_fmt(rapt->start + rapt->dur, "%R", pcal_end); switch (rapt->rpt->type) { case RECUR_DAILY: date_sec2date_fmt(rapt->start, "%b %d", pcal_date); fprintf(stream, "all day on_or_after %s (%s -> %s) %s\n", pcal_date, pcal_beg, pcal_end, rapt->mesg); break; case RECUR_WEEKLY: date_sec2date_fmt(rapt->start, "%a", pcal_date); fprintf(stream, "all %s on_or_after ", pcal_date); date_sec2date_fmt(rapt->start, "%b %d", pcal_date); fprintf(stream, "%s (%s -> %s) %s\n", pcal_date, pcal_beg, pcal_end, rapt->mesg); break; case RECUR_MONTHLY: date_sec2date_fmt(rapt->start, "%d", pcal_date); fprintf(stream, "day on all %s (%s -> %s) %s\n", pcal_date, pcal_beg, pcal_end, rapt->mesg); break; case RECUR_YEARLY: date_sec2date_fmt(rapt->start, "%b %d", pcal_date); fprintf(stream, "%s (%s -> %s) %s\n", pcal_date, pcal_beg, pcal_end, rapt->mesg); break; default: EXIT(_("incoherent repetition type")); } } else { const long YEAR_START = ui_calendar_start_of_year(); const long YEAR_END = ui_calendar_end_of_year(); if (rapt->start < YEAR_END && rapt->start > YEAR_START) foreach_date_dump(YEAR_END, rapt->rpt, &rapt->exc, rapt->start, rapt->dur, rapt->mesg, (cb_dump_t) pcal_dump_apoint, stream); } } } static void pcal_export_apoints(FILE * stream) { llist_item_t *i; fputs("\n# ============\n# Appointments\n# ============\n", stream); LLIST_TS_LOCK(&alist_p); LLIST_TS_FOREACH(&alist_p, i) { struct apoint *apt = LLIST_TS_GET_DATA(i); pcal_dump_apoint(stream, apt->start, apt->dur, apt->mesg); } LLIST_TS_UNLOCK(&alist_p); fputc('\n', stream); } static void pcal_export_todo(FILE * stream) { llist_item_t *i; fputs("#\n# Todos\n#\n", stream); LLIST_FOREACH(&todolist, i) { struct todo *todo = LLIST_TS_GET_DATA(i); if (todo->id < 0) /* completed items */ continue; fputs("note all ", stream); fprintf(stream, "%d. %s\n", todo->id, todo->mesg); } fputc('\n', stream); } /* Export calcurse data. */ void pcal_export_data(FILE * stream) { pcal_export_header(stream); pcal_export_recur_events(stream); pcal_export_events(stream); pcal_export_recur_apoints(stream); pcal_export_apoints(stream); pcal_export_todo(stream); pcal_export_footer(stream); } calcurse-4.0.0/src/wins.c0000644000175000017500000004334712472326722012172 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include "calcurse.h" #define SCREEN_ACQUIRE \ pthread_cleanup_push(screen_cleanup, (void *)NULL); \ screen_acquire(); #define SCREEN_RELEASE \ screen_release(); \ pthread_cleanup_pop(0); /* Variables to handle calcurse windows. */ struct window win[NBWINS]; struct scrollwin sw_cal; struct listbox lb_apt; struct listbox lb_todo; /* User-configurable side bar width. */ static unsigned sbarwidth_perc; static enum win slctd_win; static int layout; /* * The screen_mutex mutex and wins_refresh(), wins_wrefresh(), wins_doupdate() * functions are used to prevent concurrent updates of the screen. * It was observed that the display could get screwed up when mulitple threads * tried to refresh the screen at the same time. * * Note (2010-03-21): * Since recent versions of ncurses (5.7), rudimentary support for threads are * available (use_screen(), use_window() for instance - see curs_threads(3)), * but to remain compatible with earlier versions, it was chosen to rely on a * screen-level mutex instead. */ static pthread_mutex_t screen_mutex = PTHREAD_MUTEX_INITIALIZER; static unsigned screen_acquire(void) { if (pthread_mutex_lock(&screen_mutex) != 0) return 0; else return 1; } static void screen_release(void) { pthread_mutex_unlock(&screen_mutex); } static void screen_cleanup(void *arg) { screen_release(); } /* * FIXME: The following functions currently lock the whole screen. Use both * window-level and screen-level mutexes (or use use_screen() and use_window(), * see curs_threads(3)) to avoid locking too much. */ unsigned wins_nbar_lock(void) { return screen_acquire(); } void wins_nbar_unlock(void) { screen_release(); } void wins_nbar_cleanup(void *arg) { wins_nbar_unlock(); } unsigned wins_calendar_lock(void) { return screen_acquire(); } void wins_calendar_unlock(void) { screen_release(); } void wins_calendar_cleanup(void *arg) { wins_calendar_unlock(); } int wins_refresh(void) { int rc; SCREEN_ACQUIRE; rc = refresh(); SCREEN_RELEASE; return rc; } int wins_wrefresh(WINDOW * win) { int rc; if (!win) return ERR; SCREEN_ACQUIRE; rc = wrefresh(win); SCREEN_RELEASE; return rc; } int wins_doupdate(void) { int rc; SCREEN_ACQUIRE; rc = doupdate(); SCREEN_RELEASE; return rc; } /* Get the current layout. */ int wins_layout(void) { return layout; } /* Set the current layout. */ void wins_set_layout(int nb) { layout = nb; } /* Get the current side bar width. */ unsigned wins_sbar_width(void) { if (sbarwidth_perc > SBARMAXWIDTHPERC) { return col * SBARMAXWIDTHPERC / 100; } else { unsigned sbarwidth = (unsigned)(col * sbarwidth_perc / 100); return (sbarwidth < SBARMINWIDTH) ? SBARMINWIDTH : sbarwidth; } } /* * Return the side bar width in percentage of the total number of columns * available in calcurse's screen. */ unsigned wins_sbar_wperc(void) { return sbarwidth_perc > SBARMAXWIDTHPERC ? SBARMAXWIDTHPERC : sbarwidth_perc; } /* * Set side bar width (unit: number of characters) given a width in percentage * of calcurse's screen total width. * The side bar could not have a width representing more than 50% of the screen, * and could not be less than SBARMINWIDTH characters. */ void wins_set_sbar_width(unsigned perc) { sbarwidth_perc = perc; } /* Change the width of the side bar within acceptable boundaries. */ void wins_sbar_winc(void) { if (sbarwidth_perc < SBARMAXWIDTHPERC) sbarwidth_perc++; } void wins_sbar_wdec(void) { if (sbarwidth_perc > 0) sbarwidth_perc--; } /* Returns an enum which corresponds to the window which is selected. */ enum win wins_slctd(void) { return slctd_win; } /* Sets the selected window. */ void wins_slctd_set(enum win window) { slctd_win = window; } /* TAB key was hit in the interface, need to select next window. */ void wins_slctd_next(void) { if (slctd_win == TOD) slctd_win = CAL; else slctd_win++; } static void wins_init_panels(void) { wins_scrollwin_init(&sw_cal, win[CAL].y, win[CAL].x, CALHEIGHT + (conf.compact_panels ? 2 : 4), wins_sbar_width(), _("Calendar")); listbox_init(&lb_apt, win[APP].y, win[APP].x, win[APP].h, win[APP].w, _("Appointments"), ui_day_row_type, ui_day_height, ui_day_draw); ui_day_load_items(); listbox_init(&lb_todo, win[TOD].y, win[TOD].x, win[TOD].h, win[TOD].w, _("TODO"), ui_todo_row_type, ui_todo_height, ui_todo_draw); ui_todo_load_items(); } /* Create all the windows. */ void wins_init(void) { wins_init_panels(); win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x); win[KEY].p = newwin(1, 1, 1, 1); keypad(win[STA].p, TRUE); keypad(win[KEY].p, TRUE); /* Notify that the curses mode is now launched. */ ui_mode = UI_CURSES; } /* * Create a new window and its associated pad, which is used to make the * scrolling faster. */ void wins_scrollwin_init(struct scrollwin *sw, int y, int x, int h, int w, const char *label) { EXIT_IF(sw == NULL, "null pointer"); sw->y = y; sw->x = x; sw->h = h; sw->w = w; sw->win = newwin(h, w, y, x); sw->inner = newpad(BUFSIZ, w); sw->line_num = sw->line_off = 0; sw->label = label; } /* Resize a scrolling window. */ void wins_scrollwin_resize(struct scrollwin *sw, int y, int x, int h, int w) { EXIT_IF(sw == NULL, "null pointer"); sw->y = y; sw->x = x; sw->h = h; sw->w = w; delwin(sw->inner); delwin(sw->win); sw->win = newwin(h, w, y, x); sw->inner = newpad(BUFSIZ, w); } /* * Set the number of lines to be displayed. */ void wins_scrollwin_set_linecount(struct scrollwin *sw, unsigned lines) { sw->line_num = lines; } /* Free an already created scrollwin. */ void wins_scrollwin_delete(struct scrollwin *sw) { EXIT_IF(sw == NULL, "null pointer"); delwin(sw->inner); delwin(sw->win); } /* Draw window border and label. */ void wins_scrollwin_draw_deco(struct scrollwin *sw, int hilt) { if (hilt) wattron(sw->win, A_BOLD | COLOR_PAIR(COLR_CUSTOM)); box(sw->win, 0, 0); if (!conf.compact_panels) { mvwaddch(sw->win, 2, 0, ACS_LTEE); mvwhline(sw->win, 2, 1, ACS_HLINE, sw->w - 2); mvwaddch(sw->win, 2, sw->w - 1, ACS_RTEE); } if (hilt) wattroff(sw->win, A_BOLD | COLOR_PAIR(COLR_CUSTOM)); if (!conf.compact_panels) print_in_middle(sw->win, 1, 0, sw->w, sw->label); } /* Display a scrolling window. */ void wins_scrollwin_display(struct scrollwin *sw) { int inner_y = (conf.compact_panels ? 1 : 3); int inner_x = 1; int inner_h = sw->h - (conf.compact_panels ? 2 : 4); int inner_w = sw->w - 2; if (sw->line_num > inner_h) { int sbar_h = MAX(inner_h * inner_h / sw->line_num, 1); int sbar_y = inner_y + sw->line_off * (inner_h - sbar_h) / (sw->line_num - inner_h); int sbar_x = sw->w - 1; draw_scrollbar(sw->win, sbar_y, sbar_x, sbar_h, inner_y, inner_y + inner_h - 1, 1); } wmove(win[STA].p, 0, 0); wnoutrefresh(sw->win); pnoutrefresh(sw->inner, sw->line_off, 0, sw->y + inner_y, sw->x + inner_x, sw->y + inner_y + inner_h - 1, sw->x + inner_x + inner_w - 1); wins_doupdate(); } void wins_scrollwin_up(struct scrollwin *sw, int amount) { if ((int)sw->line_off - amount > 0) sw->line_off -= amount; else sw->line_off = 0; } void wins_scrollwin_down(struct scrollwin *sw, int amount) { int inner_h = sw->h - (conf.compact_panels ? 2 : 4); sw->line_off += amount; if ((int)sw->line_off > (int)sw->line_num - inner_h) sw->line_off = sw->line_num - inner_h; } int wins_scrollwin_is_visible(struct scrollwin *sw, unsigned line) { int inner_h = sw->h - (conf.compact_panels ? 2 : 4); return ((line >= sw->line_off) && (line < sw->line_off + inner_h)); } void wins_scrollwin_ensure_visible(struct scrollwin *sw, unsigned line) { int inner_h = sw->h - (conf.compact_panels ? 2 : 4); if (line < sw->line_off) sw->line_off = line; else if (line >= sw->line_off + inner_h) sw->line_off = line - inner_h + 1; } void wins_scrollwin_set_lower(struct scrollwin *sw, unsigned line) { int inner_h = sw->h - (conf.compact_panels ? 2 : 4); sw->line_off = MAX((int)line - inner_h + 1, 0); } void wins_resize_panels(void) { wins_get_config(); wins_scrollwin_resize(&sw_cal, win[CAL].y, win[CAL].x, CALHEIGHT + (conf.compact_panels ? 2 : 4), wins_sbar_width()); listbox_resize(&lb_apt, win[APP].y, win[APP].x, win[APP].h, win[APP].w); listbox_resize(&lb_todo, win[TOD].y, win[TOD].x, win[TOD].h, win[TOD].w); } /* * Delete the existing windows and recreate them with their new * size and placement. */ void wins_resize(void) { wins_resize_panels(); delwin(win[STA].p); delwin(win[KEY].p); win[STA].p = newwin(win[STA].h, win[STA].w, win[STA].y, win[STA].x); win[KEY].p = newwin(1, 1, 1, 1); keypad(win[STA].p, TRUE); keypad(win[KEY].p, TRUE); if (notify_bar()) notify_reinit_bar(); } /* Show the window with a border and a label. */ void wins_show(WINDOW * win, const char *label) { int width = getmaxx(win); box(win, 0, 0); if (!conf.compact_panels) { mvwaddch(win, 2, 0, ACS_LTEE); mvwhline(win, 2, 1, ACS_HLINE, width - 2); mvwaddch(win, 2, width - 1, ACS_RTEE); print_in_middle(win, 1, 0, width, label); } } /* * Get the screen size and recalculate the windows configurations. */ void wins_get_config(void) { enum win win_master; enum win win_slave[2]; unsigned master_is_left; /* Get the screen configuration */ getmaxyx(stdscr, row, col); /* fixed values for status, notification bars and calendar */ win[STA].h = STATUSHEIGHT; win[STA].w = col; win[STA].y = row - win[STA].h; win[STA].x = 0; if (notify_bar()) { win[NOT].h = 1; win[NOT].w = col; win[NOT].y = win[STA].y - 1; win[NOT].x = 0; } else { win[NOT].h = 0; win[NOT].w = 0; win[NOT].y = 0; win[NOT].x = 0; } win[CAL].h = CALHEIGHT + (conf.compact_panels ? 2 : 4); if (layout <= 4) { win_master = APP; win_slave[0] = ((layout - 1) % 2 == 0) ? CAL : TOD; win_slave[1] = ((layout - 1) % 2 == 1) ? CAL : TOD; win[TOD].h = row - (win[CAL].h + win[STA].h + win[NOT].h); } else { win_master = TOD; win_slave[0] = ((layout - 1) % 2 == 0) ? CAL : APP; win_slave[1] = ((layout - 1) % 2 == 1) ? CAL : APP; win[APP].h = row - (win[CAL].h + win[STA].h + win[NOT].h); } master_is_left = ((layout - 1) % 4 < 2); win[win_master].x = master_is_left ? 0 : wins_sbar_width(); win[win_master].y = 0; win[win_master].w = col - wins_sbar_width(); win[win_master].h = row - (win[STA].h + win[NOT].h); win[win_slave[0]].x = win[win_slave[1]].x = master_is_left ? win[win_master].w : 0; win[win_slave[0]].y = 0; win[win_slave[1]].y = win[win_slave[0]].h; win[win_slave[0]].w = win[win_slave[1]].w = wins_sbar_width(); } void wins_update_border(int flags) { if (flags & FLAG_CAL) { WINS_CALENDAR_LOCK; wins_scrollwin_draw_deco(&sw_cal, (slctd_win == CAL)); WINS_CALENDAR_UNLOCK; } if (flags & FLAG_APP) listbox_draw_deco(&lb_apt, (slctd_win == APP)); if (flags & FLAG_TOD) listbox_draw_deco(&lb_todo, (slctd_win == TOD)); } void wins_update_panels(int flags) { if (flags & FLAG_APP) ui_day_update_panel(slctd_win); if (flags & FLAG_TOD) ui_todo_update_panel(slctd_win); if (flags & FLAG_CAL) ui_calendar_update_panel(); } /* * Update all of the three windows and put a border around the * selected window. */ void wins_update(int flags) { wins_update_border(flags); wins_update_panels(flags); if (flags & FLAG_STA) { wins_update_bindings(); wins_status_bar(); } if ((flags & FLAG_NOT) && notify_bar()) notify_update_bar(); wmove(win[STA].p, 0, 0); wins_doupdate(); } /* Reset the screen, needed when resizing terminal for example. */ void wins_reset_noupdate(void) { endwin(); wins_refresh(); curs_set(0); wins_resize(); } /* Reset the screen, needed when resizing terminal for example. */ void wins_reset(void) { wins_reset_noupdate(); wins_update(FLAG_ALL); } /* Prepare windows for the execution of an external command. */ void wins_prepare_external(void) { if (notify_bar()) notify_stop_main_thread(); def_prog_mode(); ui_mode = UI_CMDLINE; clear(); wins_refresh(); endwin(); sigs_ignore(); } /* Restore windows when returning from an external command. */ void wins_unprepare_external(void) { sigs_unignore(); reset_prog_mode(); clearok(curscr, TRUE); curs_set(0); ui_mode = UI_CURSES; wins_refresh(); wins_resize(); wins_update(FLAG_ALL); if (notify_bar()) notify_start_main_thread(); } /* * While inside interactive mode, launch the external command cmd on the given * file. */ void wins_launch_external(const char *arg[]) { int pid; wins_prepare_external(); if ((pid = shell_exec(NULL, NULL, *arg, arg))) child_wait(NULL, NULL, pid); wins_unprepare_external(); } static int *bindings; static int bindings_size; static unsigned status_page; /* Sets the current set of key bindings to display in the status bar. */ void wins_set_bindings(int *new_bindings, int size) { bindings = new_bindings; bindings_size = size; } /* * Obtains the set of key bindings to display for the active panel. * * To add a key binding, insert a new binding_t item and add it to the binding * table. */ void wins_update_bindings(void) { static int bindings_cal[] = { KEY_GENERIC_HELP, KEY_GENERIC_QUIT, KEY_GENERIC_SAVE, KEY_GENERIC_RELOAD, KEY_GENERIC_CHANGE_VIEW, KEY_GENERIC_SCROLL_DOWN, KEY_GENERIC_SCROLL_UP, KEY_MOVE_UP, KEY_MOVE_DOWN, KEY_MOVE_LEFT, KEY_MOVE_RIGHT, KEY_GENERIC_GOTO, KEY_GENERIC_IMPORT, KEY_GENERIC_EXPORT, KEY_START_OF_WEEK, KEY_END_OF_WEEK, KEY_GENERIC_ADD_APPT, KEY_GENERIC_ADD_TODO, KEY_GENERIC_PREV_DAY, KEY_GENERIC_NEXT_DAY, KEY_GENERIC_PREV_WEEK, KEY_GENERIC_NEXT_WEEK, KEY_GENERIC_PREV_MONTH, KEY_GENERIC_NEXT_MONTH, KEY_GENERIC_PREV_YEAR, KEY_GENERIC_NEXT_YEAR, KEY_GENERIC_REDRAW, KEY_GENERIC_GOTO_TODAY, KEY_GENERIC_CONFIG_MENU, KEY_GENERIC_CMD }; static int bindings_apoint[] = { KEY_GENERIC_HELP, KEY_GENERIC_QUIT, KEY_GENERIC_SAVE, KEY_GENERIC_RELOAD, KEY_GENERIC_CHANGE_VIEW, KEY_GENERIC_IMPORT, KEY_GENERIC_EXPORT, KEY_ADD_ITEM, KEY_DEL_ITEM, KEY_EDIT_ITEM, KEY_VIEW_ITEM, KEY_PIPE_ITEM, KEY_GENERIC_REDRAW, KEY_REPEAT_ITEM, KEY_FLAG_ITEM, KEY_EDIT_NOTE, KEY_VIEW_NOTE, KEY_MOVE_UP, KEY_MOVE_DOWN, KEY_GENERIC_PREV_DAY, KEY_GENERIC_NEXT_DAY, KEY_GENERIC_PREV_WEEK, KEY_GENERIC_NEXT_WEEK, KEY_GENERIC_PREV_MONTH, KEY_GENERIC_NEXT_MONTH, KEY_GENERIC_PREV_YEAR, KEY_GENERIC_NEXT_YEAR, KEY_GENERIC_GOTO, KEY_GENERIC_GOTO_TODAY, KEY_GENERIC_CONFIG_MENU, KEY_GENERIC_ADD_APPT, KEY_GENERIC_ADD_TODO, KEY_GENERIC_COPY, KEY_GENERIC_PASTE, KEY_GENERIC_CMD }; static int bindings_todo[] = { KEY_GENERIC_HELP, KEY_GENERIC_QUIT, KEY_GENERIC_SAVE, KEY_GENERIC_RELOAD, KEY_GENERIC_CHANGE_VIEW, KEY_GENERIC_IMPORT, KEY_GENERIC_EXPORT, KEY_ADD_ITEM, KEY_DEL_ITEM, KEY_EDIT_ITEM, KEY_VIEW_ITEM, KEY_PIPE_ITEM, KEY_FLAG_ITEM, KEY_RAISE_PRIORITY, KEY_LOWER_PRIORITY, KEY_EDIT_NOTE, KEY_VIEW_NOTE, KEY_MOVE_UP, KEY_MOVE_DOWN, KEY_GENERIC_PREV_DAY, KEY_GENERIC_NEXT_DAY, KEY_GENERIC_PREV_WEEK, KEY_GENERIC_NEXT_WEEK, KEY_GENERIC_PREV_MONTH, KEY_GENERIC_NEXT_MONTH, KEY_GENERIC_PREV_YEAR, KEY_GENERIC_NEXT_YEAR, KEY_GENERIC_GOTO, KEY_GENERIC_GOTO_TODAY, KEY_GENERIC_CONFIG_MENU, KEY_GENERIC_ADD_APPT, KEY_GENERIC_ADD_TODO, KEY_GENERIC_REDRAW, KEY_GENERIC_CMD }; enum win active_panel = wins_slctd(); switch (active_panel) { case CAL: wins_set_bindings(bindings_cal, ARRAY_SIZE(bindings_cal)); break; case APP: wins_set_bindings(bindings_apoint, ARRAY_SIZE(bindings_apoint)); break; case TOD: wins_set_bindings(bindings_todo, ARRAY_SIZE(bindings_todo)); break; default: EXIT(_("unknown panel")); /* NOTREACHED */ } } /* Draws the status bar. */ void wins_status_bar(void) { int page_base = (KEYS_CMDS_PER_LINE * 2 - 1) * (status_page - 1); int page_size = KEYS_CMDS_PER_LINE * 2; keys_display_bindings_bar(win[STA].p, bindings, bindings_size, page_base, page_size); } /* Erase status bar. */ void wins_erase_status_bar(void) { erase_window_part(win[STA].p, 0, 0, col, STATUSHEIGHT); } /* 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; /* There is no "OtherCmd" on the last page. */ if (bindings_size % (KEYS_CMDS_PER_LINE * 2 - 1) == 1) max_page--; status_page = (status_page % max_page) + 1; } /* Reset the status bar page. */ void wins_reset_status_page(void) { status_page = 1; } calcurse-4.0.0/src/ui-calendar.c0000644000175000017500000006024712472326722013374 00000000000000/* * Calcurse - text-based organizer * * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Send your feedback or comments to : misc@calcurse.org * Calcurse home page : http://calcurse.org * */ #include #include #include #include #include #include #include "calcurse.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #define EPOCH 90 #define EPSILONg 279.403303 /* solar ecliptic long at EPOCH */ #define RHOg 282.768422 /* solar ecliptic long of perigee at EPOCH */ #define ECCEN 0.016713 /* solar orbit eccentricity */ #define lzero 318.351648 /* lunar mean long at EPOCH */ #define Pzero 36.340410 /* lunar mean long of perigee at EPOCH */ #define Nzero 318.510107 /* lunar mean long of node at EPOCH */ #define ISLEAP(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0) enum pom { NO_POM, FIRST_QUARTER, FULL_MOON, LAST_QUARTER, NEW_MOON, MOON_PHASES }; static struct date today, slctd_day; static unsigned ui_calendar_view, week_begins_on_monday; static pthread_mutex_t date_thread_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_t ui_calendar_t_date; static void draw_monthly_view(struct scrollwin *, struct date *, unsigned); static void draw_weekly_view(struct scrollwin *, struct date *, unsigned); static void (*draw_calendar[CAL_VIEWS]) (struct scrollwin *, struct date *, unsigned) = { draw_monthly_view, draw_weekly_view}; static int monthly_view_cache[MAXDAYSPERMONTH]; static int monthly_view_cache_valid = 0; static int monthly_view_cache_month = 0; /* Switch between calendar views (monthly view is selected by default). */ void ui_calendar_view_next(void) { ui_calendar_view++; if (ui_calendar_view == CAL_VIEWS) ui_calendar_view = 0; } void ui_calendar_view_prev(void) { if (ui_calendar_view == 0) ui_calendar_view = CAL_VIEWS; ui_calendar_view--; } void ui_calendar_set_view(int view) { ui_calendar_view = (view < 0 || view >= CAL_VIEWS) ? CAL_MONTH_VIEW : view; } int ui_calendar_get_view(void) { return (int)ui_calendar_view; } /* Thread needed to update current date in calendar. */ /* ARGSUSED0 */ static void *ui_calendar_date_thread(void *arg) { time_t actual, tomorrow; for (;;) { tomorrow = (time_t) (get_today() + DAYINSEC); while ((actual = time(NULL)) < tomorrow) sleep(tomorrow - actual); ui_calendar_set_current_date(); ui_calendar_update_panel(); } return NULL; } /* Launch the calendar date thread. */ void ui_calendar_start_date_thread(void) { pthread_create(&ui_calendar_t_date, NULL, ui_calendar_date_thread, NULL); } /* Stop the calendar date thread. */ void ui_calendar_stop_date_thread(void) { if (ui_calendar_t_date) { pthread_cancel(ui_calendar_t_date); pthread_join(ui_calendar_t_date, NULL); } } /* Set static variable today to current date */ void ui_calendar_set_current_date(void) { time_t timer; struct tm tm; timer = time(NULL); localtime_r(&timer, &tm); pthread_mutex_lock(&date_thread_mutex); today.dd = tm.tm_mday; today.mm = tm.tm_mon + 1; today.yyyy = tm.tm_year + 1900; pthread_mutex_unlock(&date_thread_mutex); } /* Needed to display sunday or monday as the first day of week in calendar. */ void ui_calendar_set_first_day_of_week(enum wday first_day) { switch (first_day) { case SUNDAY: week_begins_on_monday = 0; break; case MONDAY: week_begins_on_monday = 1; break; default: ERROR_MSG(_("ERROR setting first day of week")); week_begins_on_monday = 0; /* NOTREACHED */ } } /* Swap first day of week in calendar. */ void ui_calendar_change_first_day_of_week(void) { week_begins_on_monday = !week_begins_on_monday; } /* Return 1 if week begins on monday, 0 otherwise. */ unsigned ui_calendar_week_begins_on_monday(void) { return week_begins_on_monday; } /* Fill in the given variable with the current date. */ void ui_calendar_store_current_date(struct date *date) { pthread_mutex_lock(&date_thread_mutex); *date = today; pthread_mutex_unlock(&date_thread_mutex); } /* This is to start at the current date in calendar. */ void ui_calendar_init_slctd_day(void) { ui_calendar_store_current_date(&slctd_day); } /* Return the selected day in calendar */ struct date *ui_calendar_get_slctd_day(void) { return &slctd_day; } /* Returned value represents the selected day in calendar (in seconds) */ long ui_calendar_get_slctd_day_sec(void) { return date2sec(slctd_day, 0, 0); } static int ui_calendar_get_wday(struct date *date) { struct tm t; memset(&t, 0, sizeof(struct tm)); t.tm_mday = date->dd; t.tm_mon = date->mm - 1; t.tm_year = date->yyyy - 1900; mktime(&t); return t.tm_wday; } static unsigned months_to_days(unsigned month) { return (month * 3057 - 3007) / 100; } static long years_to_days(unsigned year) { return year * 365L + year / 4 - year / 100 + year / 400; } static long ymd_to_scalar(unsigned year, unsigned month, unsigned day) { long scalar; scalar = day + months_to_days(month); if (month > 2) scalar -= ISLEAP(year) ? 1 : 2; year--; scalar += years_to_days(year); return scalar; } /* * Used to change date by adding a certain amount of days or weeks. * Returns 0 on success, 1 otherwise. */ static int date_change(struct tm *date, int delta_month, int delta_day) { struct tm t; t = *date; t.tm_mon += delta_month; t.tm_mday += delta_day; if (mktime(&t) == -1) { return 1; } else { *date = t; return 0; } } void ui_calendar_monthly_view_cache_set_invalid(void) { monthly_view_cache_valid = 0; } /* Draw the monthly view inside calendar panel. */ static void draw_monthly_view(struct scrollwin *sw, struct date *current_day, unsigned sunday_first) { struct date check_day; int c_day, c_day_1, day_1_sav, numdays, j; unsigned yr, mo; int w, ofs_x, ofs_y; int item_this_day = 0; mo = slctd_day.mm; yr = slctd_day.yyyy; /* offset for centering calendar in window */ w = wins_sbar_width() - 2; ofs_y = 0; ofs_x = (w - 27) / 2; /* checking the number of days in february */ numdays = days[mo - 1]; if (2 == mo && ISLEAP(yr)) ++numdays; /* * the first calendar day will be monday or sunday, depending on * 'week_begins_on_monday' value */ c_day_1 = (int)((ymd_to_scalar(yr, mo, 1 + sunday_first) - (long)1) % 7L); /* Write the current month and year on top of the calendar */ WINS_CALENDAR_LOCK; if (yr * YEARINMONTHS + mo != monthly_view_cache_month) { /* erase the window if a new month is selected */ werase(sw_cal.inner); } custom_apply_attr(sw->inner, ATTR_HIGHEST); mvwprintw(sw->inner, ofs_y, (w - (strlen(_(monthnames[mo - 1])) + 5)) / 2, "%s %d", _(monthnames[mo - 1]), slctd_day.yyyy); custom_remove_attr(sw->inner, ATTR_HIGHEST); ++ofs_y; /* print the days, with regards to the first day of the week */ custom_apply_attr(sw->inner, ATTR_HIGHEST); for (j = 0; j < WEEKINDAYS; j++) { mvwaddstr(sw->inner, ofs_y, ofs_x + 4 * j, _(daynames[1 + j - sunday_first])); } custom_remove_attr(sw->inner, ATTR_HIGHEST); WINS_CALENDAR_UNLOCK; day_1_sav = (c_day_1 + 1) * 3 + c_day_1 - 7; /* invalidate cache if a new month is selected */ if (yr * YEARINMONTHS + mo != monthly_view_cache_month) { monthly_view_cache_month = yr * YEARINMONTHS + mo; monthly_view_cache_valid = 0; } for (c_day = 1; c_day <= numdays; ++c_day, ++c_day_1, c_day_1 %= 7) { check_day.dd = c_day; check_day.mm = slctd_day.mm; check_day.yyyy = slctd_day.yyyy; /* check if the day contains an event or an appointment */ if (monthly_view_cache_valid) { item_this_day = monthly_view_cache[c_day - 1]; } else { item_this_day = monthly_view_cache[c_day - 1] = day_check_if_item(check_day); } /* Go to next line, the week is over. */ if (!c_day_1 && 1 != c_day) { ofs_y++; 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); } WINS_CALENDAR_UNLOCK; } monthly_view_cache_valid = 1; } static int weeknum(const struct tm *t, int firstweekday) { int wday, wnum; wday = t->tm_wday; if (firstweekday == MONDAY) { if (wday == SUNDAY) wday = 6; else wday--; } wnum = ((t->tm_yday + WEEKINDAYS - wday) / WEEKINDAYS); if (wnum < 0) wnum = 0; return wnum; } /* * Compute the week number according to ISO 8601. */ static int ISO8601weeknum(const struct tm *t) { int wnum, jan1day; wnum = weeknum(t, MONDAY); jan1day = t->tm_wday - (t->tm_yday % WEEKINDAYS); if (jan1day < 0) jan1day += WEEKINDAYS; switch (jan1day) { case MONDAY: break; case TUESDAY: case WEDNESDAY: case THURSDAY: wnum++; break; case FRIDAY: case SATURDAY: case SUNDAY: if (wnum == 0) { /* Get week number of last week of last year. */ struct tm dec31ly; /* 12/31 last year */ dec31ly = *t; dec31ly.tm_year--; dec31ly.tm_mon = 11; dec31ly.tm_mday = 31; dec31ly.tm_wday = (jan1day == SUNDAY) ? 6 : jan1day - 1; dec31ly.tm_yday = 364 + ISLEAP(dec31ly.tm_year + 1900); wnum = ISO8601weeknum(&dec31ly); } break; } if (t->tm_mon == 11) { int wday, mday; wday = t->tm_wday; mday = t->tm_mday; if ((wday == MONDAY && (mday >= 29 && mday <= 31)) || (wday == TUESDAY && (mday == 30 || mday == 31)) || (wday == WEDNESDAY && mday == 31)) wnum = 1; } return wnum; } /* Draw the weekly view inside calendar panel. */ static void draw_weekly_view(struct scrollwin *sw, struct date *current_day, unsigned sunday_first) { #define DAYSLICESNO 6 const int WCALWIDTH = 28; struct tm t; int OFFY, OFFX, j, c_wday, days_to_remove, weeknum; OFFY = 0; OFFX = (wins_sbar_width() - 2 - WCALWIDTH) / 2; /* Fill in a tm structure with the first day of the selected week. */ c_wday = ui_calendar_get_wday(&slctd_day); if (sunday_first) days_to_remove = c_wday; else days_to_remove = c_wday == 0 ? WEEKINDAYS - 1 : c_wday - 1; memset(&t, 0, sizeof(struct tm)); t.tm_mday = slctd_day.dd; t.tm_mon = slctd_day.mm - 1; t.tm_year = slctd_day.yyyy - 1900; mktime(&t); date_change(&t, 0, -days_to_remove); /* Print the week number. */ weeknum = ISO8601weeknum(&t); WINS_CALENDAR_LOCK; werase(sw_cal.inner); custom_apply_attr(sw->inner, ATTR_HIGHEST); mvwprintw(sw->win, conf.compact_panels ? 0 : 2, sw->w - 9, "(# %02d)", weeknum); custom_remove_attr(sw->inner, ATTR_HIGHEST); WINS_CALENDAR_UNLOCK; /* Now draw calendar view. */ for (j = 0; j < WEEKINDAYS; j++) { struct date date; unsigned attr, item_this_day; int i, slices[DAYSLICESNO]; /* print the day names, with regards to the first day of the week */ custom_apply_attr(sw->inner, ATTR_HIGHEST); mvwaddstr(sw->inner, OFFY, OFFX + 4 * j, _(daynames[1 + j - sunday_first])); custom_remove_attr(sw->inner, ATTR_HIGHEST); /* Check if the day to be printed has an item or not. */ date.dd = t.tm_mday; date.mm = t.tm_mon + 1; date.yyyy = t.tm_year + 1900; item_this_day = day_check_if_item(date); /* Print the day numbers with appropriate decoration. */ if (t.tm_mday == current_day->dd && 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 */ else if (t.tm_mday == slctd_day.dd) attr = ATTR_HIGHEST; /* selected day */ else if (item_this_day) attr = ATTR_LOW; else attr = 0; WINS_CALENDAR_LOCK; if (attr) custom_apply_attr(sw->inner, attr); mvwprintw(sw->inner, OFFY + 1, OFFX + 1 + 4 * j, "%02d", t.tm_mday); if (attr) custom_remove_attr(sw->inner, attr); WINS_CALENDAR_UNLOCK; /* Draw slices indicating appointment times. */ memset(slices, 0, DAYSLICESNO * sizeof *slices); if (day_chk_busy_slices(date, DAYSLICESNO, slices)) { for (i = 0; i < DAYSLICESNO; i++) { if (j != WEEKINDAYS - 1 && i != DAYSLICESNO - 1) { WINS_CALENDAR_LOCK; mvwhline(sw->inner, OFFY + 2 + i, OFFX + 3 + 4 * j, ACS_S9, 2); WINS_CALENDAR_UNLOCK; } if (slices[i]) { int highlight; highlight = (t.tm_mday == slctd_day.dd) ? 1 : 0; WINS_CALENDAR_LOCK; if (highlight) custom_apply_attr(sw->inner, attr); wattron(sw->inner, A_REVERSE); mvwaddstr(sw->inner, OFFY + 2 + i, OFFX + 1 + 4 * j, " "); mvwaddstr(sw->inner, OFFY + 2 + i, OFFX + 2 + 4 * j, " "); wattroff(sw->inner, A_REVERSE); if (highlight) custom_remove_attr(sw->inner, attr); WINS_CALENDAR_UNLOCK; } } } /* get next day */ date_change(&t, 0, 1); } /* Draw marks to indicate midday on the sides of the calendar. */ WINS_CALENDAR_LOCK; custom_apply_attr(sw->inner, ATTR_HIGHEST); mvwhline(sw->inner, OFFY + 1 + DAYSLICESNO / 2, OFFX, ACS_S9, 1); mvwhline(sw->inner, OFFY + 1 + DAYSLICESNO / 2, OFFX + WCALWIDTH - 1, ACS_S9, 1); custom_remove_attr(sw->inner, ATTR_HIGHEST); WINS_CALENDAR_UNLOCK; #undef DAYSLICESNO } /* Function used to display the calendar panel. */ void ui_calendar_update_panel(void) { struct date current_day; unsigned sunday_first; ui_calendar_store_current_date(¤t_day); sunday_first = !ui_calendar_week_begins_on_monday(); draw_calendar[ui_calendar_view] (&sw_cal, ¤t_day, sunday_first); wins_scrollwin_display(&sw_cal); } /* Set the selected day in calendar to current day. */ void ui_calendar_goto_today(void) { struct date today; ui_calendar_store_current_date(&today); slctd_day.dd = today.dd; slctd_day.mm = today.mm; slctd_day.yyyy = today.yyyy; } /* * Ask for a date to jump to, then check the correctness of that date * and jump to it. * If the entered date is empty, automatically jump to the current date. * slctd_day is updated with the newly selected date. */ void ui_calendar_change_day(int datefmt) { #define LDAY 11 char selected_day[LDAY] = ""; char *outstr; int dday, dmonth, dyear; int wrong_day = 1; const char *mesg_line1 = _("The day you entered is not valid"); const char *mesg_line2 = _("Press [ENTER] to continue"); const char *request_date = _("Enter the day to go to [ENTER for today] : %s"); while (wrong_day) { asprintf(&outstr, request_date, DATEFMT_DESC(datefmt)); status_mesg(outstr, ""); mem_free(outstr); if (getstring(win[STA].p, selected_day, LDAY, 0, 1) == GETSTRING_ESC) { return; } else { if (strlen(selected_day) == 0) { wrong_day = 0; ui_calendar_goto_today(); } else if (parse_date (selected_day, datefmt, &dyear, &dmonth, &dday, ui_calendar_get_slctd_day())) { wrong_day = 0; /* go to chosen day */ slctd_day.dd = dday; slctd_day.mm = dmonth; slctd_day.yyyy = dyear; } if (wrong_day) { status_mesg(mesg_line1, mesg_line2); wgetch(win[KEY].p); } } } return; } void ui_calendar_move(enum move move, int count) { int ret, days_to_remove, days_to_add; struct tm t; memset(&t, 0, sizeof(struct tm)); t.tm_mday = slctd_day.dd; t.tm_mon = slctd_day.mm - 1; t.tm_year = slctd_day.yyyy - 1900; switch (move) { case DAY_PREV: ret = date_change(&t, 0, -count); break; case DAY_NEXT: ret = date_change(&t, 0, count); break; case WEEK_PREV: ret = date_change(&t, 0, -count * WEEKINDAYS); break; case WEEK_NEXT: ret = date_change(&t, 0, count * WEEKINDAYS); break; case MONTH_PREV: ret = date_change(&t, -count, 0); break; case MONTH_NEXT: ret = date_change(&t, count, 0); break; case YEAR_PREV: ret = date_change(&t, -count * YEARINMONTHS, 0); break; case YEAR_NEXT: ret = date_change(&t, count * YEARINMONTHS, 0); break; case WEEK_START: /* Normalize struct tm to get week day number. */ mktime(&t); if (ui_calendar_week_begins_on_monday()) days_to_remove = ((t.tm_wday == 0) ? WEEKINDAYS - 1 : t.tm_wday - 1); else days_to_remove = ((t.tm_wday == 0) ? 0 : t.tm_wday); days_to_remove += (count - 1) * WEEKINDAYS; ret = date_change(&t, 0, -days_to_remove); break; case WEEK_END: mktime(&t); if (ui_calendar_week_begins_on_monday()) days_to_add = ((t.tm_wday == 0) ? 0 : WEEKINDAYS - t.tm_wday); else days_to_add = ((t.tm_wday == 0) ? WEEKINDAYS - 1 : WEEKINDAYS - 1 - t.tm_wday); days_to_add += (count - 1) * WEEKINDAYS; ret = date_change(&t, 0, days_to_add); break; default: ret = 1; /* NOTREACHED */ } if (ret == 0) { if (t.tm_year < 2) { t.tm_mday = 1; t.tm_mon = 0; t.tm_year = 2; } slctd_day.dd = t.tm_mday; slctd_day.mm = t.tm_mon + 1; slctd_day.yyyy = t.tm_year + 1900; } } /* Returns the beginning of current year as a long. */ long ui_calendar_start_of_year(void) { time_t timer; struct tm tm; timer = time(NULL); localtime_r(&timer, &tm); tm.tm_mon = 0; tm.tm_mday = 1; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; timer = mktime(&tm); return (long)timer; } long ui_calendar_end_of_year(void) { time_t timer; struct tm tm; timer = time(NULL); localtime_r(&timer, &tm); tm.tm_mon = 0; tm.tm_mday = 1; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_year++; timer = mktime(&tm); return (long)(timer - 1); } /* * The pom, potm, dotr, adj360 are used to compute the current * phase of the moon. * The code is based on the OpenBSD version of pom(6). * Below is reported the copyright notice. */ /* * Copyright (c) 1989, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software posted to USENET. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * dtor -- * convert degrees to radians */ static double dtor(double deg) { return deg * M_PI / 180; } /* * adj360 -- * adjust value so 0 <= deg <= 360 */ static void adj360(double *deg) { for (;;) if (*deg < 0.0) *deg += 360.0; else if (*deg > 360.0) *deg -= 360.0; else break; } /* * potm -- * return phase of the moon */ static double potm(double days) { double N, Msol, Ec, LambdaSol, l, Mm, Ev, Ac, A3, Mmprime; double A4, lprime, V, ldprime, D, Nm; N = 360.0 * days / 365.242191; /* sec 46 #3 */ adj360(&N); Msol = N + EPSILONg - RHOg; /* sec 46 #4 */ adj360(&Msol); Ec = 360 / M_PI * ECCEN * sin(dtor(Msol)); /* sec 46 #5 */ LambdaSol = N + Ec + EPSILONg; /* sec 46 #6 */ adj360(&LambdaSol); l = 13.1763966 * days + lzero; /* sec 65 #4 */ adj360(&l); Mm = l - (0.1114041 * days) - Pzero; /* sec 65 #5 */ adj360(&Mm); Nm = Nzero - (0.0529539 * days); /* sec 65 #6 */ adj360(&Nm); Ev = 1.2739 * sin(dtor(2 * (l - LambdaSol) - Mm)); /* sec 65 #7 */ Ac = 0.1858 * sin(dtor(Msol)); /* sec 65 #8 */ A3 = 0.37 * sin(dtor(Msol)); Mmprime = Mm + Ev - Ac - A3; /* sec 65 #9 */ Ec = 6.2886 * sin(dtor(Mmprime)); /* sec 65 #10 */ A4 = 0.214 * sin(dtor(2 * Mmprime)); /* sec 65 #11 */ lprime = l + Ev + Ec - Ac + A4; /* sec 65 #12 */ V = 0.6583 * sin(dtor(2 * (lprime - LambdaSol))); /* sec 65 #13 */ ldprime = lprime + V; /* sec 65 #14 */ D = ldprime - LambdaSol; /* sec 67 #2 */ return 50.0 * (1 - cos(dtor(D))); /* sec 67 #3 */ } /* * Phase of the Moon. Calculates the current phase of the moon. * Based on routines from `Practical Astronomy with Your Calculator', * by Duffett-Smith. Comments give the section from the book that * particular piece of code was adapted from. * * -- Keith E. Brandt VIII 1984 * * Updated to the Third Edition of Duffett-Smith's book, IX 1998 * */ static double pom(time_t tmpt) { struct tm *GMT; double days; int cnt; GMT = gmtime(&tmpt); days = (GMT->tm_yday + 1) + ((GMT->tm_hour + (GMT->tm_min / 60.0) + (GMT->tm_sec / 3600.0)) / 24.0); for (cnt = EPOCH; cnt < GMT->tm_year; ++cnt) days += ISLEAP(cnt + TM_YEAR_BASE) ? 366 : 365; /* Selected time could be before EPOCH */ for (cnt = GMT->tm_year; cnt < EPOCH; ++cnt) days -= ISLEAP(cnt + TM_YEAR_BASE) ? 366 : 365; return potm(days); } /* * Return a pictogram representing the current phase of the moon. * Careful: date is the selected day in calendar at 00:00, so it represents * the phase of the moon for previous day. */ const char *ui_calendar_get_pom(time_t date) { const char *pom_pict[MOON_PHASES] = { " ", "|) ", "(|)", "(| ", " | " }; enum pom phase = NO_POM; double pom_today, relative_pom, pom_yesterday, pom_tomorrow; const double half = 50.0; pom_yesterday = pom(date); pom_today = pom(date + DAYINSEC); relative_pom = abs(pom_today - half); pom_tomorrow = pom(date + 2 * DAYINSEC); if (pom_today > pom_yesterday && pom_today > pom_tomorrow) phase = FULL_MOON; else if (pom_today < pom_yesterday && pom_today < pom_tomorrow) phase = NEW_MOON; else if (relative_pom < abs(pom_yesterday - half) && relative_pom < abs(pom_tomorrow - half)) phase = (pom_tomorrow > pom_today) ? FIRST_QUARTER : LAST_QUARTER; return pom_pict[phase]; } calcurse-4.0.0/doc/0000755000175000017500000000000012472330453011065 500000000000000calcurse-4.0.0/doc/import.txt0000644000175000017500000000147212273003161013054 00000000000000Import ====== Import data from an iCal file. You will be asked to enter the file name from which to load iCal items. At the end of the import process, and if the general option 'system_dialogs' is set to 'yes', a report indicating how many items were imported is shown. This report contains the total number of lines read, the number of appointments, events and todo items which were successfully imported, together with the number of items for which problems occurred and that were skipped, if any. If one or more items could not be imported, one has the possibility to read the import process report in order to identify which problems occurred. In this report is shown one item per line, with the line in the input stream at which this item begins, together with the description of why the item could not be imported. calcurse-4.0.0/doc/Makefile.in0000644000175000017500000004161412472330410013051 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(nobase_dist_doc_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)" NROFF = nroff MANS = $(dist_man_MANS) DATA = $(nobase_dist_doc_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ $(top_srcdir)/mkinstalldirs DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = $(datadir)/doc/$(PACKAGE) dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @HAVE_ASCIIDOC_TRUE@ASCIIDOC_ARGS = \ @HAVE_ASCIIDOC_TRUE@ -n \ @HAVE_ASCIIDOC_TRUE@ -a toc \ @HAVE_ASCIIDOC_TRUE@ -a icons @HAVE_A2X_TRUE@A2X_ARGS = \ @HAVE_A2X_TRUE@ -d manpage \ @HAVE_A2X_TRUE@ -f manpage doc_langs = fr de es nl ru pt_BR nobase_dist_doc_DATA = \ manual.html \ submitting-patches.html \ add.txt \ config.txt \ copy-paste.txt \ credits.txt \ delete.txt \ displacement.txt \ edit.txt \ enote.txt \ export.txt \ flag.txt \ general.txt \ goto.txt \ import.txt \ intro.txt \ manual.txt \ other.txt \ pipe.txt \ priority.txt \ reload.txt \ repeat.txt \ save.txt \ tab.txt \ view.txt \ vnote.txt \ $(foreach lang, $(doc_langs), $(wildcard $(lang)/*.txt)) dist_man_MANS = \ calcurse.1 EXTRA_DIST = \ manual.txt \ submitting-patches.txt \ calcurse.1.txt CLEANFILES = \ manual.html \ submitting-patches.html \ calcurse.1 all: all-am .SUFFIXES: .SUFFIXES: .html .txt $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-nobase_dist_docDATA: $(nobase_dist_doc_DATA) @$(NORMAL_INSTALL) @list='$(nobase_dist_doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)/$$dir"; }; \ echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(docdir)/$$dir'"; \ $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(docdir)/$$dir" || exit $$?; }; \ done uninstall-nobase_dist_docDATA: @$(NORMAL_UNINSTALL) @list='$(nobase_dist_doc_DATA)'; test -n "$(docdir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-nobase_dist_docDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-nobase_dist_docDATA uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 \ install-nobase_dist_docDATA install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am uninstall-man \ uninstall-man1 uninstall-nobase_dist_docDATA .PRECIOUS: Makefile .txt.html: @HAVE_ASCIIDOC_TRUE@ $(AM_V_GEN) $(ASCIIDOC) $(ASCIIDOC_ARGS) $< %.1: %.1.txt @HAVE_A2X_TRUE@ $(AM_V_GEN) $(A2X) $(A2X_ARGS) $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: calcurse-4.0.0/doc/save.txt0000644000175000017500000000073712273003161012503 00000000000000Save ==== Save calcurse data. Data are split into four different files which contain : / ~/.calcurse/conf -> user configuration | (layout, color, general options) | ~/.calcurse/apts -> data related to the appointments | ~/.calcurse/todo -> data related to the todo list \ ~/.calcurse/keys -> user-defined key bindings In the config menu, you can choose to save the calcurse data automatically before quitting. calcurse-4.0.0/doc/es/0000755000175000017500000000000012472330453011474 500000000000000calcurse-4.0.0/doc/es/import.txt0000644000175000017500000000147212273003161013463 00000000000000Import ====== Import data from an iCal file. You will be asked to enter the file name from which to load iCal items. At the end of the import process, and if the general option 'system_dialogs' is set to 'yes', a report indicating how many items were imported is shown. This report contains the total number of lines read, the number of appointments, events and todo items which were successfully imported, together with the number of items for which problems occurred and that were skipped, if any. If one or more items could not be imported, one has the possibility to read the import process report in order to identify which problems occurred. In this report is shown one item per line, with the line in the input stream at which this item begins, together with the description of why the item could not be imported. calcurse-4.0.0/doc/es/save.txt0000644000175000017500000000073712273003161013112 00000000000000Save ==== Save calcurse data. Data are split into four different files which contain : / ~/.calcurse/conf -> user configuration | (layout, color, general options) | ~/.calcurse/apts -> data related to the appointments | ~/.calcurse/todo -> data related to the todo list \ ~/.calcurse/keys -> user-defined key bindings In the config menu, you can choose to save the calcurse data automatically before quitting. calcurse-4.0.0/doc/es/delete.txt0000644000175000017500000000113212273003161013404 00000000000000Delete ====== Delete an element in the todo or appointment list. Depending on which panel is selected when you press the delete key, the highlighted item of either the todo or appointment list will be removed from this list. If the item to be deleted is recurrent, you will be asked if you wish to suppress all of the item occurrences or just the one you selected. If the general option 'confirm_delete' is set to 'YES', then you will be asked for confirmation before deleting the selected event. Do not forget to save the calendar data to retrieve the modifications next time you launch calcurse. calcurse-4.0.0/doc/es/tab.txt0000644000175000017500000000075012273003161012715 00000000000000Tab === Switch between panels. The panel currently in use has its border colorized. Some actions are possible only if the right panel is selected. For example, if you want to add a task in the todo list, you need first to press the 'TAB' key to get the todo panel selected. Then you can press 'a' to add your item. Notice that at the bottom of the screen the list of possible actions change while pressing 'TAB', so you always know what action can be performed on the selected panel. calcurse-4.0.0/doc/es/repeat.txt0000644000175000017500000000256312273003161013433 00000000000000Repeat ====== Repeat an event or an appointment. You must first select the item to be repeated by moving inside the appointment panel. Then running the repeat command will lead you to a set of three questions, with which you will be able to specify the repetition characteristics: o type: you can choose between a daily, weekly, monthly or yearly repetition by pressing 'D', 'W', 'M' or 'Y' respectively. o frequency: this indicates how often the item shall be repeated. For example, if you want to remember an anniversary, choose a 'yearly' repetition with a frequency of '1', which means it must be repeated every year. Another example: if you go to the restaurant every two days, choose a 'daily' repetition with a frequency of '2'. o ending date: this specifies when to stop repeating the selected event or appointment. To indicate an endless repetition, enter '0' and the item will be repeated forever. Notes ----- * Repeated items are marked with an '*' inside the appointment panel, to be easily recognizable from non-repeated ones. * The 'Repeat' and 'Delete' command can be mixed to create complicated configurations, as it is possible to delete only one occurrence of a repeated item. calcurse-4.0.0/doc/es/enote.txt0000644000175000017500000000172612273003161013265 00000000000000EditNote ======== Attach a note to any type of item, or edit an already existing note. This feature is useful if you do not have enough space to store all of your item description, or if you would like to add sub-tasks to an already existing todo item for example. You first need to highlight the item you want the note to be attached to. Then, after pressing the edit note key, you will be driven to an external editor to edit your note. This editor is chosen the following way: * If the 'VISUAL' environment variable is set, then this will be the default editor to be called. * If 'VISUAL' is not set, then the 'EDITOR' environment variable will be used as the default editor. * If none of the above environment variables is set, then '/usr/bin/vi' will be used. Once the item note is edited and saved, quit your favorite editor. You will then go back to calcurse, and the '>' sign will appear in front of the highlighted item, meaning there is a note attached to it. calcurse-4.0.0/doc/es/goto.txt0000644000175000017500000000064412273003161013121 00000000000000Goto ==== Jump to a specific day in the calendar. Using this command, you do not need to travel to that day using the displacement keys inside the calendar panel. If you hit [ENTER] without specifying any date, calcurse checks the system current date and you will be taken to that date. Notice that you can also specify a global key binding to return to the current day, no matter which panel is currently selected. calcurse-4.0.0/doc/es/intro.txt0000644000175000017500000000125712273003161013305 00000000000000calcurse Online Help ==================== Welcome to the calcurse online help. The online help system allows for easily getting help on specific calcurse features. On the calcurse main screen, type `:help ` (e.g. `:help add`) or `:help ` (e.g. `:help ^A`) to get help on a specific feature or key binding. Type `:help` without any parameter to display this introduction or simply use the corresponding keyboard shortcut (`?` by default). All help texts are displayed using an external pager. You need to exit the pager in order to get back to calcurse (pressing `q` should almost always work). The default pager can be changed by setting the PAGER environment variable. calcurse-4.0.0/doc/es/vnote.txt0000644000175000017500000000127012273003161013300 00000000000000ViewNote ======== View a note which was previously attached to an item (an item which owns a note has a '>' sign in front of it). This command only permits to view the note, not to edit it (to do so, use the 'EditNote' command). Once you highlighted an item with a note attached to it, and the view note key was pressed, you will be driven to an external pager to view that note. The default pager is chosen the following way: * If the 'PAGER' environment variable is set, then this will be the default viewer to be called. * If the above environment variable is not set, then '/usr/bin/less' will be used. As for editing a note, quit the pager and you will be driven back to calcurse. calcurse-4.0.0/doc/es/other.txt0000644000175000017500000000052712273003161013272 00000000000000OtherCmd ======== Switch between status bar help pages. Because the terminal screen is too narrow to display all of the available commands, this command can be used to see the next set of commands together with their key bindings. Once the last status bar page is reached, running the command another time leads you back to the first page. calcurse-4.0.0/doc/es/priority.txt0000644000175000017500000000136512273003161014033 00000000000000Priority ======== Change the priority of the currently selected item in the todo list. Priorities are represented by the number appearing in front of the todo description. This number goes from 9 for the lowest priority to 1 for the highest priority. Todo items having higher priorities are placed first (at the top) inside the todo panel. By default, if you want to raise the priority of a todo item, you need to press '+'. In doing so, the number in front of this item will decrease, meaning its priority increases. The item position inside the todo panel may change, depending on the priority of the items above it. At the opposite, to lower a todo priority, press '-'. The todo position may also change depending on the priority of the items below. calcurse-4.0.0/doc/es/add.txt0000644000175000017500000000326012273003161012676 00000000000000Add === Add an item in either the todo or appointment list, depending on which panel is selected. To enter a new item in the todo list, you will need first to enter the description of this new item. Then you will be asked to specify the todo priority. This priority is represented by a number going from 9 for the lowest priority, to 1 for the highest one. It is still possible to change the item priority afterwards, by using the '+' and '-' keys inside the todo panel. If the appointment panel is selected, you will be able to enter either a new appointment or a new all-day long event. To enter a new event, press [ENTER] instead of the item start time, and just fill in the event description. To enter a new appointment to be added in the appointment list, you will need to enter successively the time at which the appointment begins, the appointment length (either by specifying the end time in [hh:mm] or the duration in [+hh:mm], [+xxdxxhxxm] or [+mm] format), and the description of the event. If you skip the end time by pressing [ENTER], a punctual appointment will be created. The day at which occurs the event or appointment is the day currently selected in the calendar, so you need to move to the desired day before. Notes ----- * If an appointment lasts for such a long time that it continues on the next days, this event will be indicated on all the corresponding days, and the beginning or ending hour will be replaced by '..' if the event does not begin or end on the day. * If you only press [ENTER] at the description prompt, without any description, no item will be added. * Do not forget to save the calendar data to retrieve the new event next time you launch calcurse. calcurse-4.0.0/doc/es/displacement.txt0000644000175000017500000000151012273003161014612 00000000000000Displacement keys ================= Move around inside calcurse screens. The following scheme summarizes how to get around: move up move to previous week k K UP move left ^ move to previous day | h H LFT <-- + --> l L RGT | move right v move to next day j J DWN move to next week move down Moreover, while inside the calendar panel, the '0' key moves to the first day of the week, and the '$' key selects the last day of the week. calcurse-4.0.0/doc/es/general.txt0000644000175000017500000000226612273003161013570 00000000000000Generic key bindings ==================== Some of the key bindings apply whatever panel is selected. They are called generic key bindings. Here is the list of all the generic key bindings, together with their corresponding action: '^R' : Redraw function -> redraws calcurse panels, this is useful if you resize your terminal screen or when garbage appears inside the display '^A' : Add Appointment -> add an appointment or an event '^T' : Add TODO -> add a todo 'T' : -1 Day -> move to previous day 't' : +1 Day -> move to next day 'W' : -1 Week -> move to previous week 'w' : +1 Week -> move to next week 'M' : -1 Month -> move to previous month 'm' : +1 Month -> move to next month 'Y' : -1 Year -> move to previous year 'y' : +1 Year -> move to next year '^G' : Goto today -> move to current day The '^P' and '^N' keys are used to scroll text upward or downward when inside specific screens such the help screens for example. They are also used when the calendar screen is selected to switch between the available views (monthly and weekly calendar views). calcurse-4.0.0/doc/es/copy-paste.txt0000644000175000017500000000074112273003161014233 00000000000000Copy and Paste ============== Copy and paste the currently selected item. This is useful to quickly copy an item from one date to another. To do so, one must first highlight the item that needs to be copied, then press the key assigned to the copy function. Once the new date is chosen in the calendar, the appointment panel must be selected and the paste key must be pressed to paste the item. The item will appear in the appointment panel, assigned to the newly selected date. calcurse-4.0.0/doc/es/config.txt0000644000175000017500000000132712273003161013415 00000000000000Config ====== Open the configuration submenu. From this submenu, you can select between color, layout, notification and general options, and you can also configure your key bindings. The color submenu lets you choose the color theme. The layout submenu lets you choose the calcurse screen layout, in other words where to place the three different panels on the screen. The general options submenu brings a screen with the different options which modifies the way calcurse interacts with the user. The notify submenu allows you to change the notify-bar settings. The keys submenu lets you define your own key bindings. Do not forget to save the calendar data to retrieve your configuration next time you launch calcurse. calcurse-4.0.0/doc/es/view.txt0000644000175000017500000000072212273003161013120 00000000000000View ==== View the item you select in either the todo or appointment panel. This is useful when an event description is longer than the available space to display it. If that is the case, the description will be shortened and its end replaced by '...'. To be able to read the entire description, just run the view command and a popup window will appear, containing the whole event. Press any key to close the popup window and go back to the main calcurse screen. calcurse-4.0.0/doc/es/flag.txt0000644000175000017500000000132312273003161013055 00000000000000Flag Item ========= Toggle an appointment's 'important' flag or a todo's 'completed' flag. If a todo is flagged as completed, its priority number will be replaced by an 'X' sign. Completed tasks will no longer appear in exported data or when using the '-t' command line flag (unless specifying '0' as the priority number, in which case only completed tasks will be shown). If an appointment is flagged as important, an exclamation mark appears in front of it, and you will be warned if time gets closed to the appointment start time. To customize the way one gets notified, the configuration submenu lets you choose the command launched to warn user of an upcoming appointment, and how long before it he gets notified. calcurse-4.0.0/doc/es/edit.txt0000644000175000017500000000177412273003161013103 00000000000000Edit Item ========= Edit the item which is currently selected. Depending on the item type (appointment, event or todo) and item repetition, you will be asked to choose one of the item properties to modify. An item property is one of the following: the start time, the end time, the description, or the item repetition. You can also move an item, that is, move an item without changing its duration. Once you have chosen the property you want to modify, you will be shown its actual value, and you will be able to change it as you like. Notes ----- * If you choose to edit the item repetition properties, you will be asked to re-enter all of the repetition characteristics (repetition type, frequency, and ending date). Moreover, the previous data concerning the deleted occurrences will be lost. * You can enter an empty end time to convert an existing appointment into a punctual appointment. * Do not forget to save the calendar data to retrieve the modified properties next time you launch Calcurse. calcurse-4.0.0/doc/es/pipe.txt0000644000175000017500000000034112273003161013100 00000000000000Pipe ==== Pipe the selected item to an external program. Press the '|' key to pipe the currently selected appointment or todo entry to an external program. You will be driven back to calcurse as soon as the program exits. calcurse-4.0.0/doc/es/credits.txt0000644000175000017500000000133012472326722013613 00000000000000Calcurse - text-based organizer =============================== Copyright (c) 2004-2015 calcurse Development Team All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Send your feedback or comments to : misc@calcurse.org Calcurse home page : http://calcurse.org calcurse-4.0.0/doc/es/export.txt0000644000175000017500000000103412273003161013464 00000000000000Export ====== Export calcurse data (appointments, events and todos). This leads to the export submenu, from which you can choose between two different export formats: 'ical' and 'pcal'. Choosing one of those formats lets you export calcurse data to iCal or pcal format. You first need to specify the file to which the data will be exported. By default, this file is: ~/calcurse.ics for an ical export, and: ~/calcurse.txt for a pcal export. calcurse data are exported in the following order: events, appointments, todos. calcurse-4.0.0/doc/delete.txt0000644000175000017500000000113212273003161012775 00000000000000Delete ====== Delete an element in the todo or appointment list. Depending on which panel is selected when you press the delete key, the highlighted item of either the todo or appointment list will be removed from this list. If the item to be deleted is recurrent, you will be asked if you wish to suppress all of the item occurrences or just the one you selected. If the general option 'confirm_delete' is set to 'YES', then you will be asked for confirmation before deleting the selected event. Do not forget to save the calendar data to retrieve the modifications next time you launch calcurse. calcurse-4.0.0/doc/tab.txt0000644000175000017500000000075012273003161012306 00000000000000Tab === Switch between panels. The panel currently in use has its border colorized. Some actions are possible only if the right panel is selected. For example, if you want to add a task in the todo list, you need first to press the 'TAB' key to get the todo panel selected. Then you can press 'a' to add your item. Notice that at the bottom of the screen the list of possible actions change while pressing 'TAB', so you always know what action can be performed on the selected panel. calcurse-4.0.0/doc/fr/0000755000175000017500000000000012472330453011474 500000000000000calcurse-4.0.0/doc/fr/import.txt0000644000175000017500000000147212273003161013463 00000000000000Import ====== Import data from an iCal file. You will be asked to enter the file name from which to load iCal items. At the end of the import process, and if the general option 'system_dialogs' is set to 'yes', a report indicating how many items were imported is shown. This report contains the total number of lines read, the number of appointments, events and todo items which were successfully imported, together with the number of items for which problems occurred and that were skipped, if any. If one or more items could not be imported, one has the possibility to read the import process report in order to identify which problems occurred. In this report is shown one item per line, with the line in the input stream at which this item begins, together with the description of why the item could not be imported. calcurse-4.0.0/doc/fr/save.txt0000644000175000017500000000073712273003161013112 00000000000000Save ==== Save calcurse data. Data are split into four different files which contain : / ~/.calcurse/conf -> user configuration | (layout, color, general options) | ~/.calcurse/apts -> data related to the appointments | ~/.calcurse/todo -> data related to the todo list \ ~/.calcurse/keys -> user-defined key bindings In the config menu, you can choose to save the calcurse data automatically before quitting. calcurse-4.0.0/doc/fr/delete.txt0000644000175000017500000000113212273003161013404 00000000000000Delete ====== Delete an element in the todo or appointment list. Depending on which panel is selected when you press the delete key, the highlighted item of either the todo or appointment list will be removed from this list. If the item to be deleted is recurrent, you will be asked if you wish to suppress all of the item occurrences or just the one you selected. If the general option 'confirm_delete' is set to 'YES', then you will be asked for confirmation before deleting the selected event. Do not forget to save the calendar data to retrieve the modifications next time you launch calcurse. calcurse-4.0.0/doc/fr/tab.txt0000644000175000017500000000075012273003161012715 00000000000000Tab === Switch between panels. The panel currently in use has its border colorized. Some actions are possible only if the right panel is selected. For example, if you want to add a task in the todo list, you need first to press the 'TAB' key to get the todo panel selected. Then you can press 'a' to add your item. Notice that at the bottom of the screen the list of possible actions change while pressing 'TAB', so you always know what action can be performed on the selected panel. calcurse-4.0.0/doc/fr/repeat.txt0000644000175000017500000000256312273003161013433 00000000000000Repeat ====== Repeat an event or an appointment. You must first select the item to be repeated by moving inside the appointment panel. Then running the repeat command will lead you to a set of three questions, with which you will be able to specify the repetition characteristics: o type: you can choose between a daily, weekly, monthly or yearly repetition by pressing 'D', 'W', 'M' or 'Y' respectively. o frequency: this indicates how often the item shall be repeated. For example, if you want to remember an anniversary, choose a 'yearly' repetition with a frequency of '1', which means it must be repeated every year. Another example: if you go to the restaurant every two days, choose a 'daily' repetition with a frequency of '2'. o ending date: this specifies when to stop repeating the selected event or appointment. To indicate an endless repetition, enter '0' and the item will be repeated forever. Notes ----- * Repeated items are marked with an '*' inside the appointment panel, to be easily recognizable from non-repeated ones. * The 'Repeat' and 'Delete' command can be mixed to create complicated configurations, as it is possible to delete only one occurrence of a repeated item. calcurse-4.0.0/doc/fr/enote.txt0000644000175000017500000000172612273003161013265 00000000000000EditNote ======== Attach a note to any type of item, or edit an already existing note. This feature is useful if you do not have enough space to store all of your item description, or if you would like to add sub-tasks to an already existing todo item for example. You first need to highlight the item you want the note to be attached to. Then, after pressing the edit note key, you will be driven to an external editor to edit your note. This editor is chosen the following way: * If the 'VISUAL' environment variable is set, then this will be the default editor to be called. * If 'VISUAL' is not set, then the 'EDITOR' environment variable will be used as the default editor. * If none of the above environment variables is set, then '/usr/bin/vi' will be used. Once the item note is edited and saved, quit your favorite editor. You will then go back to calcurse, and the '>' sign will appear in front of the highlighted item, meaning there is a note attached to it. calcurse-4.0.0/doc/fr/goto.txt0000644000175000017500000000064412273003161013121 00000000000000Goto ==== Jump to a specific day in the calendar. Using this command, you do not need to travel to that day using the displacement keys inside the calendar panel. If you hit [ENTER] without specifying any date, calcurse checks the system current date and you will be taken to that date. Notice that you can also specify a global key binding to return to the current day, no matter which panel is currently selected. calcurse-4.0.0/doc/fr/intro.txt0000644000175000017500000000125712273003161013305 00000000000000calcurse Online Help ==================== Welcome to the calcurse online help. The online help system allows for easily getting help on specific calcurse features. On the calcurse main screen, type `:help ` (e.g. `:help add`) or `:help ` (e.g. `:help ^A`) to get help on a specific feature or key binding. Type `:help` without any parameter to display this introduction or simply use the corresponding keyboard shortcut (`?` by default). All help texts are displayed using an external pager. You need to exit the pager in order to get back to calcurse (pressing `q` should almost always work). The default pager can be changed by setting the PAGER environment variable. calcurse-4.0.0/doc/fr/vnote.txt0000644000175000017500000000127012273003161013300 00000000000000ViewNote ======== View a note which was previously attached to an item (an item which owns a note has a '>' sign in front of it). This command only permits to view the note, not to edit it (to do so, use the 'EditNote' command). Once you highlighted an item with a note attached to it, and the view note key was pressed, you will be driven to an external pager to view that note. The default pager is chosen the following way: * If the 'PAGER' environment variable is set, then this will be the default viewer to be called. * If the above environment variable is not set, then '/usr/bin/less' will be used. As for editing a note, quit the pager and you will be driven back to calcurse. calcurse-4.0.0/doc/fr/other.txt0000644000175000017500000000052712273003161013272 00000000000000OtherCmd ======== Switch between status bar help pages. Because the terminal screen is too narrow to display all of the available commands, this command can be used to see the next set of commands together with their key bindings. Once the last status bar page is reached, running the command another time leads you back to the first page. calcurse-4.0.0/doc/fr/priority.txt0000644000175000017500000000136512273003161014033 00000000000000Priority ======== Change the priority of the currently selected item in the todo list. Priorities are represented by the number appearing in front of the todo description. This number goes from 9 for the lowest priority to 1 for the highest priority. Todo items having higher priorities are placed first (at the top) inside the todo panel. By default, if you want to raise the priority of a todo item, you need to press '+'. In doing so, the number in front of this item will decrease, meaning its priority increases. The item position inside the todo panel may change, depending on the priority of the items above it. At the opposite, to lower a todo priority, press '-'. The todo position may also change depending on the priority of the items below. calcurse-4.0.0/doc/fr/add.txt0000644000175000017500000000326012273003161012676 00000000000000Add === Add an item in either the todo or appointment list, depending on which panel is selected. To enter a new item in the todo list, you will need first to enter the description of this new item. Then you will be asked to specify the todo priority. This priority is represented by a number going from 9 for the lowest priority, to 1 for the highest one. It is still possible to change the item priority afterwards, by using the '+' and '-' keys inside the todo panel. If the appointment panel is selected, you will be able to enter either a new appointment or a new all-day long event. To enter a new event, press [ENTER] instead of the item start time, and just fill in the event description. To enter a new appointment to be added in the appointment list, you will need to enter successively the time at which the appointment begins, the appointment length (either by specifying the end time in [hh:mm] or the duration in [+hh:mm], [+xxdxxhxxm] or [+mm] format), and the description of the event. If you skip the end time by pressing [ENTER], a punctual appointment will be created. The day at which occurs the event or appointment is the day currently selected in the calendar, so you need to move to the desired day before. Notes ----- * If an appointment lasts for such a long time that it continues on the next days, this event will be indicated on all the corresponding days, and the beginning or ending hour will be replaced by '..' if the event does not begin or end on the day. * If you only press [ENTER] at the description prompt, without any description, no item will be added. * Do not forget to save the calendar data to retrieve the new event next time you launch calcurse. calcurse-4.0.0/doc/fr/displacement.txt0000644000175000017500000000151012273003161014612 00000000000000Displacement keys ================= Move around inside calcurse screens. The following scheme summarizes how to get around: move up move to previous week k K UP move left ^ move to previous day | h H LFT <-- + --> l L RGT | move right v move to next day j J DWN move to next week move down Moreover, while inside the calendar panel, the '0' key moves to the first day of the week, and the '$' key selects the last day of the week. calcurse-4.0.0/doc/fr/general.txt0000644000175000017500000000226612273003161013570 00000000000000Generic key bindings ==================== Some of the key bindings apply whatever panel is selected. They are called generic key bindings. Here is the list of all the generic key bindings, together with their corresponding action: '^R' : Redraw function -> redraws calcurse panels, this is useful if you resize your terminal screen or when garbage appears inside the display '^A' : Add Appointment -> add an appointment or an event '^T' : Add TODO -> add a todo 'T' : -1 Day -> move to previous day 't' : +1 Day -> move to next day 'W' : -1 Week -> move to previous week 'w' : +1 Week -> move to next week 'M' : -1 Month -> move to previous month 'm' : +1 Month -> move to next month 'Y' : -1 Year -> move to previous year 'y' : +1 Year -> move to next year '^G' : Goto today -> move to current day The '^P' and '^N' keys are used to scroll text upward or downward when inside specific screens such the help screens for example. They are also used when the calendar screen is selected to switch between the available views (monthly and weekly calendar views). calcurse-4.0.0/doc/fr/copy-paste.txt0000644000175000017500000000074112273003161014233 00000000000000Copy and Paste ============== Copy and paste the currently selected item. This is useful to quickly copy an item from one date to another. To do so, one must first highlight the item that needs to be copied, then press the key assigned to the copy function. Once the new date is chosen in the calendar, the appointment panel must be selected and the paste key must be pressed to paste the item. The item will appear in the appointment panel, assigned to the newly selected date. calcurse-4.0.0/doc/fr/config.txt0000644000175000017500000000132712273003161013415 00000000000000Config ====== Open the configuration submenu. From this submenu, you can select between color, layout, notification and general options, and you can also configure your key bindings. The color submenu lets you choose the color theme. The layout submenu lets you choose the calcurse screen layout, in other words where to place the three different panels on the screen. The general options submenu brings a screen with the different options which modifies the way calcurse interacts with the user. The notify submenu allows you to change the notify-bar settings. The keys submenu lets you define your own key bindings. Do not forget to save the calendar data to retrieve your configuration next time you launch calcurse. calcurse-4.0.0/doc/fr/view.txt0000644000175000017500000000072212273003161013120 00000000000000View ==== View the item you select in either the todo or appointment panel. This is useful when an event description is longer than the available space to display it. If that is the case, the description will be shortened and its end replaced by '...'. To be able to read the entire description, just run the view command and a popup window will appear, containing the whole event. Press any key to close the popup window and go back to the main calcurse screen. calcurse-4.0.0/doc/fr/flag.txt0000644000175000017500000000132312273003161013055 00000000000000Flag Item ========= Toggle an appointment's 'important' flag or a todo's 'completed' flag. If a todo is flagged as completed, its priority number will be replaced by an 'X' sign. Completed tasks will no longer appear in exported data or when using the '-t' command line flag (unless specifying '0' as the priority number, in which case only completed tasks will be shown). If an appointment is flagged as important, an exclamation mark appears in front of it, and you will be warned if time gets closed to the appointment start time. To customize the way one gets notified, the configuration submenu lets you choose the command launched to warn user of an upcoming appointment, and how long before it he gets notified. calcurse-4.0.0/doc/fr/edit.txt0000644000175000017500000000177412273003161013103 00000000000000Edit Item ========= Edit the item which is currently selected. Depending on the item type (appointment, event or todo) and item repetition, you will be asked to choose one of the item properties to modify. An item property is one of the following: the start time, the end time, the description, or the item repetition. You can also move an item, that is, move an item without changing its duration. Once you have chosen the property you want to modify, you will be shown its actual value, and you will be able to change it as you like. Notes ----- * If you choose to edit the item repetition properties, you will be asked to re-enter all of the repetition characteristics (repetition type, frequency, and ending date). Moreover, the previous data concerning the deleted occurrences will be lost. * You can enter an empty end time to convert an existing appointment into a punctual appointment. * Do not forget to save the calendar data to retrieve the modified properties next time you launch Calcurse. calcurse-4.0.0/doc/fr/pipe.txt0000644000175000017500000000034112273003161013100 00000000000000Pipe ==== Pipe the selected item to an external program. Press the '|' key to pipe the currently selected appointment or todo entry to an external program. You will be driven back to calcurse as soon as the program exits. calcurse-4.0.0/doc/fr/credits.txt0000644000175000017500000000133012472326722013613 00000000000000Calcurse - text-based organizer =============================== Copyright (c) 2004-2015 calcurse Development Team All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Send your feedback or comments to : misc@calcurse.org Calcurse home page : http://calcurse.org calcurse-4.0.0/doc/fr/export.txt0000644000175000017500000000103412273003161013464 00000000000000Export ====== Export calcurse data (appointments, events and todos). This leads to the export submenu, from which you can choose between two different export formats: 'ical' and 'pcal'. Choosing one of those formats lets you export calcurse data to iCal or pcal format. You first need to specify the file to which the data will be exported. By default, this file is: ~/calcurse.ics for an ical export, and: ~/calcurse.txt for a pcal export. calcurse data are exported in the following order: events, appointments, todos. calcurse-4.0.0/doc/Makefile.am0000644000175000017500000000174512472326533013054 00000000000000AUTOMAKE_OPTIONS = foreign if HAVE_ASCIIDOC ASCIIDOC_ARGS = \ -n \ -a toc \ -a icons endif if HAVE_A2X A2X_ARGS = \ -d manpage \ -f manpage endif doc_langs = fr de es nl ru pt_BR nobase_dist_doc_DATA = \ manual.html \ submitting-patches.html \ add.txt \ config.txt \ copy-paste.txt \ credits.txt \ delete.txt \ displacement.txt \ edit.txt \ enote.txt \ export.txt \ flag.txt \ general.txt \ goto.txt \ import.txt \ intro.txt \ manual.txt \ other.txt \ pipe.txt \ priority.txt \ reload.txt \ repeat.txt \ save.txt \ tab.txt \ view.txt \ vnote.txt \ $(foreach lang, $(doc_langs), $(wildcard $(lang)/*.txt)) dist_man_MANS = \ calcurse.1 EXTRA_DIST = \ manual.txt \ submitting-patches.txt \ calcurse.1.txt CLEANFILES = \ manual.html \ submitting-patches.html \ calcurse.1 docdir = $(datadir)/doc/$(PACKAGE) .txt.html: if HAVE_ASCIIDOC $(AM_V_GEN) $(ASCIIDOC) $(ASCIIDOC_ARGS) $< endif %.1: %.1.txt if HAVE_A2X $(AM_V_GEN) $(A2X) $(A2X_ARGS) $< endif calcurse-4.0.0/doc/reload.txt0000644000175000017500000000064412472326533013024 00000000000000Reload ====== Reload appointments and todo items. When there are unsaved modifications, calcurse asks you whether you want to discard the modifications, keep the local modifications (and cancel the reload action) or merge the modifications with the content of the data files. The merge operation launches an external merge tool (defaults to vimdiff(1), can be changed by setting the 'MERGETOOL' environment variable). calcurse-4.0.0/doc/pt_BR/0000755000175000017500000000000012472330453012073 500000000000000calcurse-4.0.0/doc/pt_BR/import.txt0000644000175000017500000000157512273003161014066 00000000000000Importar ======== Importa dados de um arquivo icalendar. Você será solicitado a inserir o nome de arquivo do qual serão carregados itens de ical. No final do processo de importação, e se a opção geral 'system_dialogs' estiver definida como 'yes', um relatório indicando quantos itens foram importados será mostrado. Este relatório conterá o número total de linhas lidas, o número de de agendamentos, eventos e tarefas que foram importados com sucesso, junto com o número de itens que apresentaram problemas e que foram ignorados, se houver algum. Se um ou mais itens não puder ser importados, é possível ler o relatório do processo de importação para que se identifique que problemas ocorreram. Neste relatório é exibido um item por linha, com a linha do fluxo de entrada em que este item começa, junto com a descrição do porquê o item não pôde ser importado. calcurse-4.0.0/doc/pt_BR/save.txt0000644000175000017500000000101512273003161013477 00000000000000Salvar ====== Salva dados do calcurse. Dados serão separados em quatro arquivos diferentes contendo : / ~/.calcurse/conf -> configuração do usuário | (layout, cores, opções gerais) | ~/.calcurse/apts -> dados relacionados a agendamentos | ~/.calcurse/todo -> dados relacionados a lista de tarefas \ ~/.calcurse/keys -> teclas de atalho do usuário No menu Config, você pode escolher salvar os dados do Calcurse automaticamente antes de cada saída. calcurse-4.0.0/doc/pt_BR/delete.txt0000644000175000017500000000125112273003161014005 00000000000000Excluir ======= Exclui um elemento da lista de tarefas ou de agendamentos. Dependendo do painel selecionado, quando você pressionar a tecla de exclusão, o item selecionado de tanto a lista de Tarefas quanto de agendamentos será excluído desta lista. Se o item a ser excluído é recorrente, você será perguntado se você deseja suprimir todas ocorrências deste item ou somente o item que você selecionou. Se a opção geral "confirm_delete" estiver definida para "SIM", a você será solicitada confirmação antes de excluir o evento selecionado. Não esqueça de salvar os dados do calendário para recuperar as modificações na próxima vez que iniciar o calcurse. calcurse-4.0.0/doc/pt_BR/tab.txt0000644000175000017500000000111212273003161013305 00000000000000Aba === Alterna entre painéis. O painel em uso no momento tem a sua borda colorizada. Algumas ações são possíveis somente se o painel correto estiver selecionado. Por exemplo, se você quer adicionar uma tarefa na lista de TAREFAS, você precisa primeiro pressionar a tecla "TAB" para que o painel de tarefas seja selecionado. Então, você poderá pressionar "a" para adicionar seu item. Repare como na parte inferior da tela a lista de ações possíveis muda quando se pressiona "TAB", de forma que você sempre saberá qual ação pode ser executada no painel selecionado. calcurse-4.0.0/doc/pt_BR/repeat.txt0000644000175000017500000000300112273003161014016 00000000000000Repetir ======= Repete um evento ou um agendamento. Primeiro você deve que selecionar o item a ser repetido movendo-o dentro do painel de agendamentos. Então, ao executar o comando de repetição, levará você a um conjunto de três perguntas, com as quais você poderá especificar as caraterísticas da repetição: o tipo: você pode escolher entre uma repetição diária, semanal, mensal ou anual pressionando, "D", "W","M" ou "Y", respectivamente. o frequência: indica com qual frequência o item deve se repetir. Por exemplo, se você deseja sempre se lembrar de um aniversário, escolha uma repetição "anual" com uma frequência de "1", o que significa que deve repetir todo ano. Outro exemplo: se você vai ao restaurante a cada dois dias, escolha uma repetição "diária" com frequência de "2". o data final: isso especifica quando deve parar a repetição do evento ou agendamento selecionado. Para indicar uma repetição sem fim, insira "0" e o item será repetido para sempre. Notas ----- * Itens repetidos são marcados com um "*" dentro do painel de agendamentos, para ser facilmente diferenciável dos não repetidos. * Os comandos "Repetir" e "Excluir" podem ser combinados para para criar configurações complicadas, já que é possível excluir somente uma ocorrência de um item repetido. calcurse-4.0.0/doc/pt_BR/enote.txt0000644000175000017500000000207612273003161013663 00000000000000EditarNota ========== Anexa uma nota a qualquer tipo de item, ou edita qualquer nota existente. Este recurso é útil se você não tem espaço suficiente para armazenar toda descrição de seu item ou se você deseja adicionar subtarefas para um item de tarefa já existente, por exemplo. Você primeiro precisa selecionar o item ao qual você deseja que a nota seja anexada. Então, após pressionar a tecla do editor de notas, você será levado a um edito externo para editar a sua nota. O editor é escolhido das seguintes formas: * Se a variável de ambiente "VISUAL" estiver definida, então este será o editor padrão a ser chamado. * Se "VISUAL" não estiver definido, então a variável de ambiente "EDITOR" será usada como o editor padrão. * Se nenhuma das variáveis de ambiente acima estiverem definidas, então "/usr/bin/vi" será usado. Assim que a nota do item for editada e salvada, saia do seu editor favorito. Então, você voltará para o calcurse, e o sinal ">" aparecerá na frente do item selecionado, o que significa haver uma nota anexada a ele. calcurse-4.0.0/doc/pt_BR/goto.txt0000644000175000017500000000074512273003161013522 00000000000000Ir Para ======= Pula para um dia especificado no calendário. Ao usar este comando, você não precisará viajar até aquele dia usando as teclas de movimentação dentro do painel de calendário. Se você pressionar [ENTER] sem especificar qualquer data, o calcurse verifica a data atual do sistema e você será levado àquela data. Repare que ao especificar uma tecla de atalho global, não importa o painel que esteja selecionado, será selecionado o dia atual no calendário. calcurse-4.0.0/doc/pt_BR/intro.txt0000644000175000017500000000137012273003161013700 00000000000000Ajuda Online do Calcurse ======================== Bem-vindo à ajuda online do calcurse. O sistema de ajuda online permite a obtenção de ajuda sobre recursos específicos do calcurse. Na tela principal do calcurse, digite ":help " (ex.: ":help add") ou ":help " (ex.: ":help ^A") para obter ajuda sobre um recurso específico ou tecla de atalho. Digite ":help" sem qualquer parâmetro para exibir esta introdução ou simplesmente use o atalho de teclado correspondente ("?" por padrão). Todos os textos de ajuda são exibidos usando um paginador externo. Você precisa sair do paginador para voltar ao calcurse (pressionar "q" deve quase sempre funcionar). O paginador padrão pode ser alterado ao definir a variável de ambiente PAGER. calcurse-4.0.0/doc/pt_BR/vnote.txt0000644000175000017500000000141212273003161013675 00000000000000VerNota ======= Vê uma nota que foi previamente anexada a um item (um item que possui uma nota tem um sinal ">" na sua frente). Este comando somente permite que se visualize a note, e não que se edite (para fazê-lo, use o comando "EditarNota"). Assim que você tiver realçado um item contendo uma nota anexada, e a tecla de ver nota for pressionada, você será levado para um paginador externo para ver aquela nota. O paginador padrão é escolhido das seguintes formas: * se a variávei de ambiente "PAGER" estiver definida, então esta será chamada como visualizador padrão. * Se a variável de ambiente acima não estiver definida, então "/usr/bin/less" será usado. Quanto à edição de notas, saia do paginador e você será levado de volta ao Calcurse. calcurse-4.0.0/doc/pt_BR/other.txt0000644000175000017500000000062712273003161013672 00000000000000OutroCmd ======== Alterna entre páginas de ajuda de barra de status. Por a tela do terminal ser muito estreita para exibir todos os comandos disponíveis, este comando pode ser usado para ver o próximo conjunto de comandos junto com suas teclas de atalhos. Assim que se chegar à última página de barra de status, ao se executar o comando mais uma vez levará você de volta para a primeira página. calcurse-4.0.0/doc/pt_BR/priority.txt0000644000175000017500000000153512273003161014431 00000000000000Prioridade ========== Altera a prioridade do item atualmente selecionado na lista de tarefas. Prioridades são representadas pelo número que aparece na frente da descrição da tarefa. O número vai desde 9, para a menor prioridade, até 1, para a maior prioridade. As tarefas que tenham maior prioridade serão posicionadas primeiro (no topo) dentro do painel de tarefas. Se você desejar aumentar a prioridade de um item de tarefa, você deverá pressionar "%s". Ao fazer isso, o número da prioridade deste item será reduzida, o que significa um aumento na sua prioridade. A posição do item dentro do painel de tarefas pode mudar, dependendo da prioridade dos itens acima deste. E o contrário, para diminuir a prioridade de uma tarefa, pressione "-". A posição da tarefa pode também alterar dependendo da prioridade dos demais itens abaixo deste. calcurse-4.0.0/doc/pt_BR/add.txt0000644000175000017500000000356312273003161013303 00000000000000Adicionar ========= Adiciona um item para a lista de tarefas ou de agendamentos, dependendo de qual painel está selecionado. Para inserir um novo item na lista de tarefas, você precisa primeiro inserir a descrição deste novo item. Então, você será solicitado para especificar a prioridade da tarefa. Esta prioridade é representada por um número que vai de 9, como a menor prioridade, até 1, como a maior. Também é possível alterar a prioridade do item posteriormente, usando as teclas '+' e '-' dentro do painel de tarefas. Se o painel de agendamentos estiver selecionado, você poderá inserir o novo agendamento ou um evento para dia inteiro. Para inserir um novo evento, pressione [ENTER] ao invés do item de horário de início, e simplesmente preencha a descrição do evento. Para inserir um novo agendamento a ser adicionado à lista de agendamentos, será necessário que você insira sucessivamente o horário no que o agendamento será iniciado, sua extensão (especificando o horário de término no formato [hh:mm] ou a duração, no formato [+hh:mm], [+xxdxxhxxm] ou [+mm]) e a descrição do evento. Se você pular o horário de término pressionando [ENTER], um agendamento pontual será criado. O dia em que o evento ou agendamento ocorrerá é o dia atualmente selecionado no calendário. Então, você deve mover para o dia desejado antes. Notas ----- * Se um agendamento durar por tanto tempo que chegar a continuar pelos próximos dias, este evento será indicado em todos os dias correspondentes, e os horários de início ou término serão substituídos por '..' se o evento não iniciar ou terminar no dia. * Se você apenas pressionar [ENTER] no prompt de descrição, sem qualquer descrição, nenhum item será adicionado. * Não se esqueça de salvar os dados do calendário para obter o novo evento na próxima vez que você iniciar o calcurse. calcurse-4.0.0/doc/pt_BR/displacement.txt0000644000175000017500000000156212273003161015220 00000000000000Teclas de deslocamento ====================== Movimenta pelas telas do calcurse. O seguinte esquema resume como funciona a movimentação: move para cima move para semana anterior k K UP move para esquerda ^ move para dia anterior | h H LFT <-- + --> l L RGT | move para direita v move para dia seguinte k K DWN move para semana seguinte move para baixo Ademais, enquanto dentro do painel de calendário, a tecla "0" move para o primeiro dia da semana, e a tecla "$" seleciona o último dia da semana. calcurse-4.0.0/doc/pt_BR/general.txt0000644000175000017500000000252612273003161014166 00000000000000Teclas de Atalhos Genéricas =========================== Algumas das teclas de atalhos se aplicam a qualquer painel que esteja selecionado. Elas são chamadas teclas de atalhos genéricas. Aqui está a lista de todas as teclas de atalhos genéricas, junto com suas respectivas ações: '^R' : Redesenhar -> redesenha painéis do calcurse, sendo útil se você redimensionar a sua tela de terminal ou quando aparece lixo na visão do calcurse '^A' : AdicAgend -> adiciona um agendamento ou um evento '^T' : AdiTarefa -> adiciona uma tarefa 'T' : -1 Dia -> move para dia anterior 't' : +1 Dia -> move para dia seguinte 'W' : -1 Semana -> move para semana anterior 'w' : +1 Semana -> move para semana seguinte 'M' : -1 Mês -> move para mês anterior 'm' : +1 Mês -> move para mês seguinte 'Y' : -1 Ano -> move para ano anterior 'y' : +1 Ano -> move para ano seguinte '^G' : IrPara hoje -> move para o dia de hoje As teclas '^P' e '^N' são usadas para rolar texto para cima e para baixo quando se está dentro de telas específicas, como, por exemplo, as telas de ajuda. Elas também são usadas quando a tela de calendário está selecionada para se alternar entre as visões disponíveis (visão de calendário mensal ou semanal). calcurse-4.0.0/doc/pt_BR/copy-paste.txt0000644000175000017500000000100512273003161014624 00000000000000Copiar e Colar ============== Copia e cola o item atualmente selecionado. Isso é útil para rapidamente copiar um item de uma data para outra. Para isso, deve-se primeiro destacar o item que precisa ser copiado e, então, pressionar a tecla designada para de função de cópia. Assim que a nova data tiver sido escolhida no calendário, o painel de agendamentos deve estar selecionado e a tecla deve ser pressionado para colar o item. O item vai aparecer o painel de agendamentos, atribuído à data selecionada. calcurse-4.0.0/doc/pt_BR/config.txt0000644000175000017500000000157212273003161014016 00000000000000Config ====== Abre os submenus de configuração. A partir deste submenu, você pode selecionar dentre várias cores, layout, notificações e opções em geral, e você pode até mesmo configurar suas teclas de atalhos. O submenu de cor permite que você escolha o tema de cores. O submenu de layout permite que você escolha o layout da tela do calcurse. Em outras palavras, permite definir onde colocar três painéis diferentes na tela. O submenu de opções gerais, Geral, traz uma tela com opções diferentes, que modificam a forma como Calcurse interage com o usuário. O submenu de notificação permite que você altere as configurações da barrade notificação. O submenu de teclas permite que você defina seus próprios atalhos de teclado. Não esqueça de salvar os dados do calendário para restaurar sua configuração na próxima vez que você iniciar o calcurse. calcurse-4.0.0/doc/pt_BR/view.txt0000644000175000017500000000077012273003161013522 00000000000000Ver === Vê o item que você selecionou em tanto no painel de tarefas quanto de agendamentos. Isto é útil quando a descrição de um evento é maior do que o espaço disponível para exibi-lo. Se esse for o caso, a descrição será reduzida e seu final será substituído por "...". Para ler a descrição por inteiro, basta pressionar "%s" e uma janela de pop-up aparecerá, contendo o evento completo. Pressione qualquer tecla para fechar a janela pop-up e vá para a tela principal do Calcurse. calcurse-4.0.0/doc/pt_BR/flag.txt0000644000175000017500000000160412273003161013456 00000000000000Sinalizar Item ============== Alterna estado de sinalização de "importante" de um agendamento ou de "finalizada" de uma tarefa. Se uma tarefa é sinalizada como finalizada, seu número de prioridade será substituído por um sinal "X". Tarefas finalizadas não vão mais aparecer nos dados exportados ou quando se estiver usando a opção de linha de comando "-t" (a não ser que tenha sido especificado "0" como o número de prioridade, caso este em que somente tarefas finalizadas serão mostrados). Se um agendamento é sinalizado como importante, uma exclamação vai aparecer na frente dele e você será avisado quando o horário de início do agendamento se aproximar. Para personalizar a forma de notificação, o submenu de configuração permite que você escolha o comando a ser executado para avisar o usuário de um agendamento próximo e quanto tempo até que ele seja notificado. calcurse-4.0.0/doc/pt_BR/edit.txt0000644000175000017500000000217512273003161013476 00000000000000Editar item =========== Edita o item selecionado. Dependendo do tipo do item (agendamento, evento, ou tarefa), e se ele for repetido ou não, a você será solicitado que escolha uma das propriedades do item a modificar. Uma propriedade de item é uma das seguintes: o horário de início, o horário de término, a descrição ou a repetição do item. Você também pode mover um item, isto é, mover um item sem alterar sua duração. Assim que você tiver escolhido a propriedade que você deseja modificar, será mostrado o valor atual e você poderá alterá-lo como quiser. Notas ------ * Se você escolher editar as propriedades de repetição do item, a você será solicitado que insira novamente todas as características de repetição (tipo de repetição, frequência e data de término). Ademais, a data anterior referente às ocorrências excluídas será perdida. * Você pode inserir um horário de término vazio para converter um agendamento existente em um agendamento pontual. * Não esqueça de salvar os dados do calendário para recuperar as propriedades modificadas na próxima vez que iniciar o calcurse. calcurse-4.0.0/doc/pt_BR/pipe.txt0000644000175000017500000000043112273003161013477 00000000000000Redirecionar ============ Redireciona o item selecionado para um programa externo. Pressione a tecla '|' para redirecionar a entrada de agendamento ou tarefa selecionada para um programa externo. Você será trazido de volta para o calcurse assim que o programa for finalizado. calcurse-4.0.0/doc/pt_BR/credits.txt0000644000175000017500000000153712472326722014223 00000000000000Calcurse - organizador baseado em texto ======================================= Copyright (c) 2004-2015 Equipe de Desenvolvimento do Calcurse Todos os direitos reservados. A redistribuição e uso na forma de código-fonte e binário, com ou sem modificações, são permitidas na medida em que as seguintes condições sejam cumpridas: - As redistribuições de código-fonte devem reter os direitos de propriedade, a presente licença, esta lista de condições e a seguinte ressalva. - As redistribuições em forma binária devem reproduzir a presente licença, esta lista de condições e a seguinte ressalva na documentação e/ou outros materiais fornecidos com a distribuição. Envie seu feedback ou comentários para : misc@calcurse.org Homepage do Calcurse : http://calcurse.org calcurse-4.0.0/doc/pt_BR/export.txt0000644000175000017500000000117312273003161014067 00000000000000Exportar ======== Exporta dados do calcurse (agendamentos, eventos e tarefas). Esta opção leva ao submenu de exportação, no qual você pode escolher entre dois formatos diferentes de exportação: "ical" e "pcal". Escolhendo um destes formatos, será exportado dados do calcurse para o formato icalendar ou pcal. Você primeiro precisa especificar o arquivo para o qual o arquivo será exportado. Por padrão, este arquivo será: ~/calcurse.ics para uma exportação em ical, e: ~/calcurse.txt para uma exportação em pcal. Os dados do calcurse são exportados na seguinte ordem: eventos, agendamentos, tarefas. calcurse-4.0.0/doc/repeat.txt0000644000175000017500000000256312273003161013024 00000000000000Repeat ====== Repeat an event or an appointment. You must first select the item to be repeated by moving inside the appointment panel. Then running the repeat command will lead you to a set of three questions, with which you will be able to specify the repetition characteristics: o type: you can choose between a daily, weekly, monthly or yearly repetition by pressing 'D', 'W', 'M' or 'Y' respectively. o frequency: this indicates how often the item shall be repeated. For example, if you want to remember an anniversary, choose a 'yearly' repetition with a frequency of '1', which means it must be repeated every year. Another example: if you go to the restaurant every two days, choose a 'daily' repetition with a frequency of '2'. o ending date: this specifies when to stop repeating the selected event or appointment. To indicate an endless repetition, enter '0' and the item will be repeated forever. Notes ----- * Repeated items are marked with an '*' inside the appointment panel, to be easily recognizable from non-repeated ones. * The 'Repeat' and 'Delete' command can be mixed to create complicated configurations, as it is possible to delete only one occurrence of a repeated item. calcurse-4.0.0/doc/enote.txt0000644000175000017500000000172612273003161012656 00000000000000EditNote ======== Attach a note to any type of item, or edit an already existing note. This feature is useful if you do not have enough space to store all of your item description, or if you would like to add sub-tasks to an already existing todo item for example. You first need to highlight the item you want the note to be attached to. Then, after pressing the edit note key, you will be driven to an external editor to edit your note. This editor is chosen the following way: * If the 'VISUAL' environment variable is set, then this will be the default editor to be called. * If 'VISUAL' is not set, then the 'EDITOR' environment variable will be used as the default editor. * If none of the above environment variables is set, then '/usr/bin/vi' will be used. Once the item note is edited and saved, quit your favorite editor. You will then go back to calcurse, and the '>' sign will appear in front of the highlighted item, meaning there is a note attached to it. calcurse-4.0.0/doc/manual.txt0000644000175000017500000016112212472330243013023 00000000000000//// /* * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ //// CALCURSE - text-based organizer =============================== Abstract -------- This manual describes `calcurse` functionalities, and how to use them. The installation from source is first described, together with the available command line arguments. The user interface is then presented, with all of the customizable options that change `calcurse` behavior. Last, bug reporting procedure is explained, as well as the way one can contribute to `calcurse` development. Introduction ------------ `calcurse` is a text-based calendar and scheduling application. It helps keeping track of events, appointments and everyday tasks. A configurable notification system reminds user of upcoming deadlines, and the curses based interface can be customized to suit user needs. All of the commands are documented within an online help system. Overview -------- Creation history ~~~~~~~~~~~~~~~~ Frederic started thinking about this project when he was finishing his Ph.D. in Astrophysics as it started to be a little hard to organize himself and he really needed a good tool for managing his appointments and todo list. Unfortunately, he finished his Ph.D. before finishing `calcurse` but he continued working on it, hoping it would be helpful to other people. In mid-2010, Lukas took over development of `calcurse` and is now the main contributor and reviewer of patches. But why `calcurse` anyway? Well, it is simply the concatenation of *cal*endar and *curse*s, the name of the library used to build the user interface. Important features ~~~~~~~~~~~~~~~~~~ `Calcurse` is multi-platform and intended to be lightweight, fast and reliable. It is to be used inside a console or terminal, locally or on a distant machine within an ssh (or similar) connection. `Calcurse` can be run in two different modes : interactive or non-interactive mode. The first mode allows oneself to view its own personal organizer almost everywhere, thanks to the text-based interface. The second mode permits to easily build reminders just by adding `calcurse` with appropriate command line arguments inside a cron tab or within a shell init script. Moreover, `calcurse` was created with the end-user in mind, and tends to be as friendly as possible. This means a complete on-line help system, together with having all of the possible actions displayed at any time inside a status bar. The user interface is configurable, and one can choose between several color and layout combinations. Key bindings are also configurable, to fit everyone's needs. Last, a configurable notification system reminds user of upcoming appointments. The reminders are sent even if the user's interface is not running, as calcurse is able to run in background. Installation ------------ Requirements ~~~~~~~~~~~~ ncurses library ^^^^^^^^^^^^^^^ `Calcurse` requires only a `C` compiler, such as `cc` or `gcc`, and the `ncurses` library. It would be very surprising not to have a valid `ncurses` library already installed on your computer, but if not, you can find it at the following url: http://ftp.gnu.org/pub/gnu/ncurses/ NOTE: It is also possible to link `calcurse` against the `ncursesw` library (ncurses with support for unicode). [[install_requirements_gettext]] gettext library ^^^^^^^^^^^^^^^ `calcurse` supports internationalization (*i18n* hereafter) through the `gettext` utilities. This means `calcurse` can produce multi-lingual messages if compiled with native language support (i.e. *NLS*). However, *NLS* is optionnal and if you do not want to have support for multi-lingual messages, you can disable this feature. This is done by giving the `--disable-nls` option to `configure` (see section <>). To check if the `gettext` utilities are installed on your system, you can search for the `libintl.h` header file for instance: ---- $ locate libintl.h ---- If this header file is not found, then you can obtain the `gettext` sources at the following url : http://ftp.gnu.org/pub/gnu/gettext/ NOTE: Even if `libintl.h` is found on your system, it can be wise to specify its location during the <>, by using the `--with-libintl-prefix` option with `configure`. Indeed, the `configure` could fail to locate this library if installed in an uncommon place. [[install_process]] Install process ~~~~~~~~~~~~~~~ First you need to gunzip and untar the source archive: ---- $ tar zxvf calcurse-4.0.0.tar.gz ---- Once you meet the requirements and have extracted the archive, the install process is quite simple, and follows the standard three steps process: ---- $ ./configure $ make $ make install # (may require root privilege) ---- Use `./configure --help` to obtain a list of possible options. calcurse basics --------------- Invocation ~~~~~~~~~~ [[basics_invocation_commandline]] Command line arguments ^^^^^^^^^^^^^^^^^^^^^^ `calcurse` takes the following options from the command line (both short and long options are supported): `-a, --appointment`:: Print the appointments and events for the current day and exit. Equivalent to `-Q --filter-type cal`. The calendar from which to read the appointments can be specified using the `-c` flag. `-c , --calendar `:: Specify the calendar file to use. The default calendar is `~/.calcurse/apts` (see section <>). This option has precedence over `-D`. `-d , --day `:: Print the appointments for the given date or for the given number of upcoming days, depending on the argument format. Two possible formats are supported: + -- * a date (possible formats described below). * a number `n`. -- + In the first case, the appointment list for the specified date will be returned, while in the second case the appointment list for the `n` upcoming days will be returned. As an example, typing `calcurse -d 3` will display your appointments for today, tomorrow, and the day after tomorrow. The first form is equivalent to `-Q --filter-type cal --from `, the second form is equivalent to `-Q --filter-type cal --days `. + Note: as for the `-a` flag, the calendar from which to read the appointments can be specified using the `-c` flag. `--days `:: Specify the length of the range (in days) when used with `-Q`. Cannot be combined with `--to`. `-D , --directory `:: Specify the data directory to use. If not specified, the default directory is `~/.calcurse/`. `--filter-type `:: Ignore any items that do not match the type mask. See <> for details. `--filter-pattern `:: Ignore any items with a description that does not match the pattern. See <> for details. `--filter-start-from `:: Ignore any items that start before a given date. See <> for details. `--filter-start-to `:: Ignore any items that start after a given date. See <> for details. `--filter-start-after `:: Only include items that start after a given date. See <> for details. `--filter-start-before `:: Only include items that start before a given date. See <> for details. `--filter-start-range `:: Only include items within a given range. See <> for details. `--filter-end-from `:: Ignore any items that end before a given date. See <> for details. `--filter-end-to `:: Ignore any items that end after a given date. See <> for details. `--filter-end-after `:: Only include items that end after a given date. See <> for details. `--filter-end-before `:: Only include items that end before a given date. See <> for details. `--filter-end-range `:: Only include items within a given range. See <> for details. `--filter-priority `:: Only include items with a given priority. See <> for details. `--filter-completed`:: Only include completed TODO items. See <> for details. `--filter-uncompleted`:: Only include uncompleted TODO items. See <> for details. `--format-apt `:: Specify a format to control the output of appointments in non-interactive mode. See the <> section for detailed information on format strings. `--format-recur-apt `:: Specify a format to control the output of recurrent appointments in non-interactive mode. See the <> section for detailed information on format strings. `--format-event `:: Specify a format to control the output of events in non-interactive mode. See the <> section for detailed information on format strings. `--format-recur-event `:: Specify a format to control the output of recurrent events in non-interactive mode. See the <> section for detailed information on format strings. `--format-todo `:: Specify a format to control the output of todo items in non-interactive mode. See the <> section for detailed information on format strings. `--from `:: Specify the start date of the range when used with `-Q`. `-g, --gc`:: Run the garbage collector for note files and exit. `-G, --grep`:: Print appointments and TODO items using the calcurse data file format. The filter interface can be used to further restrict the output. See also: <>. `-h, --help`:: Print a short help text describing the supported command-line options, and exit. `-i , --import `:: Import the icalendar data contained in `file`. `-l , --limit `:: Limit the number of results printed to 'num'. `-n, --next`:: Print the next appointment within upcoming 24 hours and exit. The indicated time is the number of hours and minutes left before this appointment. + Note: the calendar from which to read the appointments can be specified using the `-c` flag. `-Q, --query`:: Print all appointments inside a given query range, followed by all TODO items. The query range defaults to the current day and can be changed by using the `--from` and `--to` (or `--days`) parameters. The filter interface can be used to further restrict the output. See also: <>. `-r[num], --range[=num]`:: Print events and appointments for the num number of days and exit. If no num is given, a range of 1 day is considered. Equivalent to `-Q --filter-type cal --days `. `--read-only`:: Don't save configuration nor appointments/todos. + WARNING: Use this this with care! If you run an interactive calcurse instance in read-only mode, all changes from this session will be lost without warning! `-s[date], --startday[=date]`:: Print events and appointments from date and exit. If no date is given, the current day is considered. Equivalent to `-Q --filter-type cal --from `. `-S, --search=`:: When used with the `-a`, `-d`, `-r`, `-s`, or `-t` flag, print only the items having a description that matches the given regular expression. Equivalent to `-Q --filter-pattern `. `--status`:: Display the status of running instances of calcurse. If calcurse is running, this will tell if the interactive mode was launched or if calcurse is running in background. The process pid will also be indicated. `-t[num], --todo[=num]`:: Print the `todo` list and exit. If the optional number `num` is given, then only todos having a priority equal to `num` will be returned. The priority number must be between 1 (highest) and 9 (lowest). It is also possible to specify `0` for the priority, in which case only completed tasks will be shown. Equivalent to `-Q --filter-type todo`, combined with `--filter-priority` and `--filter-completed` or `--filter-uncompleted`. `--to `:: Specify the end date of the range when used with `-Q`. Cannot be combined with `--days`. `-v, --version`:: Display `calcurse` version and exit. `-x[format], --export[=format]`:: Export user data to specified format. Events, appointments and todos are converted and echoed to stdout. Two possible formats are available: ical and pcal (see section <> below). If the optional argument `format` is not given, ical format is selected by default. + Note: redirect standard output to export data to a file, by issuing a command such as: + ---- $ calcurse --export > my_data.dat ---- NOTE: The `-N` option has been removed in calcurse 3.0.0. See the <> section on how to print note along with appointments and events. [[basics_filters]] Filters ^^^^^^^ Filters can be used to restrict the set of items which are loaded from the appointments file when using calcurse in non-interactive mode. The following filters are currently supported: `--filter-type `:: Ignore any items that do not match the type mask. The type mask is a comma-separated list of valid type descriptions which include `event`, `apt`, `recur-event`, `recur-apt` and `todo`. You can also use `recur` as a shorthand for `recur-event,recur-apt` and `cal` as a shorthand for `event,apt,recur`. `--filter-pattern `:: Ignore any items with a description that does not match the pattern. The pattern is interpreted as extended regular expression. `--filter-start-from `:: Ignore any items that start before a given date. `--filter-start-to `:: Ignore any items that start after a given date. `--filter-start-after `:: Only include items that start after a given date. `--filter-start-before `:: Only include items that start before a given date. `--filter-start-range `:: Only include items with a start date that falls within a given range. A range consists of a start date and an end date, separated by a comma. `--filter-end-from `:: Ignore any items that end before a given date. `--filter-end-to `:: Ignore any items that end after a given date. `--filter-end-after `:: Only include items that end after a given date. `--filter-end-before `:: Only include items that end before a given date. `--filter-end-range `:: Only include items with an end date that falls within a given range. A range consists of a start date and an end date, separated by a comma. `--filter-priority `:: Only include items with a given priority. `--filter-completed`:: Only include completed TODO items. `--filter-uncompleted`:: Only include uncompleted TODO items. [[basics_format_strings]] Format strings ^^^^^^^^^^^^^^ Format strings are composed of printf()-style format specifiers -- ordinary characters are copied to stdout without modification. Each specifier is introduced by a `%` and is followed by a character which specifies the field to print. The set of available fields depends on the item type. Format specifiers for appointments ++++++++++++++++++++++++++++++++++ `s`:: Print the start time of the appointment as UNIX time stamp `S`:: Print the start time of the appointment using the `hh:mm` format `d`:: Print the duration of the appointment in seconds `e`:: Print the end time of the appointment as UNIX time stamp `E`:: Print the end time of the appointment using the `hh:mm` format `m`:: Print the description of the item `n`:: Print the name of the note file belonging to the item `N`:: Print the note belonging to the item Format specifiers for events ++++++++++++++++++++++++++++ `m`:: Print the description of the item `n`:: Print the name of the note file belonging to the item `N`:: Print the note belonging to the item Format specifiers for todo items ++++++++++++++++++++++++++++++++ `p`:: Print the priority of the item `m`:: Print the description of the item `n`:: Print the name of the note file belonging to the item `N`:: Print the note belonging to the item Examples ++++++++ `calcurse -r7 --format-apt='- %S -> %E\n\t%m\n%N'`:: Print appointments and events for the next seven days. Also, print the notes attached to each regular appointment (simulates `-N` for appointments). `calcurse -r7 --format-apt=' - %m (%S to %E)\n' --format-recur-apt=' - %m (%S to %E)\n'`:: Print appointments and events for the next seven days and use a custom format for (recurrent) appointments: ` - Some appointment (18:30 to 21:30)`. `calcurse -t --format-todo '(%p) %m\n'`:: List all todo items and put parentheses around the priority specifiers. Extended format specifiers ++++++++++++++++++++++++++ Extended format specifiers can be used if you want to specify advanced formatting options. Extended specifiers are introduced by `%(` and are terminated by a closing parenthesis (`)`). The following list includes all short specifiers and corresponding long options: * `s`: `(start)` * `S`: `(start:epoch)` * `e`: `(end)` * `E`: `(end:epoch)` * `d`: `(duration)` * `r`: `(remaining)` * `m`: `(message)` * `n`: `(noteid)` * `N`: `(note)` * `p`: `(priority)` The `(start)` and `(end)` specifiers support strftime()-style extended formatting options that can be used for fine-grained formatting. Additionally, the special formats `epoch` (which is equivalent to `(start:%s)` or `(end:%s)`) and `default` (which is mostly equivalent to `(start:%H:%M)` or `(end:%H:%M)` but displays `..:..` if the item doesn't start/end at the current day) are supported. The `(remaining)` and `(duration)` specifiers support a subset of the strftime()-style formatting options, along with two extra qualifiers. The supported options are `%d`, `%H`, `%M` and `%S`, and by default each of these is zero-padded to two decimal places. To avoid the zero-padding, add `-` before the formatting option (for example, `%-d`). Additionally, the `E` option will display the total number of time units until the appointment, rather than showing the remaining number of time units modulo the next larger time unit. For example, an appointment in 50 hours will show as 02:00 with the formatting string `%H:%M`, but will show 50:00 with the formatting string `%EH:%M`. Note that if you are combining the `-` and `E` options, the `-` must come first. The default format for the `(remaining)` specifier is `%EH:%M`. [[basics_invocation_variable]] Environment variable for i18n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `calcurse` can be compiled with native language support (see <>). Thus, if you wish to have messages displayed into your native language, first make sure it is available by looking at the `po/LINGUAS` file. This file indicates the set of available languages by showing the two-letters corresponding code (for exemple, *fr* stands for french). If you do not find your language, it would be greatly appreciated if you could help translating `calcurse` (see the <> section). If your language is available, run `calcurse` with the following command: ---- $ LC_ALL=fr_FR calcurse ---- ... where *fr_FR* is the locale name in this exemple, but should be replaced by the locale corresponding to the desired language. You should also specify the charset to be used, because in some cases the accents and such are not displayed correctly. This charset is indicated at the beginning of the po file corresponding to the desired language. For instance, you can see in the fr.po file that it uses the iso-8859-1 charset, so you could run `calcurse` using the following command: ---- $ LC_ALL=fr_FR.ISO8859-1 calcurse ---- Other environment variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^ The following environment variables affect the way `calcurse` operates: `VISUAL`:: Specifies the external editor to use for writing notes. `EDITOR`:: If the `VISUAL` environment variable is not set, then `EDITOR` will be used as the default external editor. If none of those variables are set, then `/usr/bin/vi` is used instead. `PAGER`:: Specifies the default viewer to be used for reading notes. If this variable is not set, then `/usr/bin/less` is used. User interface ~~~~~~~~~~~~~~ Non-interactive mode ^^^^^^^^^^^^^^^^^^^^ When called with at least one of the following arguments: `-a`, `-d`, `-h`, `-n`, `-t`, `-v`, `-x`, `calcurse` is started in non-interactive mode. This means the desired information will be displayed, and after that, `calcurse` simply quits and you are driven back to the shell prompt. That way, one can add a line such as `calcurse --todo --appointment` in its init config file to display at logon the list of tasks and appointments scheduled for the current day. [[basics_interface_interactive]] Interactive mode ^^^^^^^^^^^^^^^^ NOTE: Key bindings that are indicated in this manual correspond to the default ones, defined when `calcurse` is launched for the first time. If those key bindings do not suit user's needs, it is possible to change them within the keys configuration menu (see <>). When called without any argument or only with the `-c` option, `calcurse` is started in interactive mode. In this mode, you are shown an interface containing three different panels which you can browse using the `TAB` key, plus a notification bar and a status bar (see figure below). ---- appointment panel---. .---calendar panel | | v v +------------------------------------++----------------------------+ | Appointments || Calendar | |------------------------------------||----------------------------| | (|) April 6, 2006 || April 2006 | | ||Mon Tue Wed Thu Fri Sat Sun | | || 1 2 | | || 3 4 5 6 7 8 9 | | || 10 11 12 13 14 15 16 | | || 17 18 19 20 21 22 23 | | || 24 25 26 27 28 29 30 | | || | | |+----------------------------+ | |+----------------------------+ | || ToDo | todo | ||----------------------------| panel | || | | | || | | | || |<--. | || | +------------------------------------++----------------------------+ |---[ Mon 2006-11-22 | 10:11:43 ]---(apts)----> 01:20 :: lunch <---|<--. +------------------------------------------------------------------+ notify-bar | ? Help R Redraw H/L -/+1 Day G GoTo C Config | | Q Quit S Save J/K -/+1 Week Tab Chg View |<-. +------------------------------------------------------------------+ | | status bar ---- The first panel represents a calendar which allows to highlight a particular day, the second one contains the list of the events and appointments on that day, and the last one contains a list of tasks to do but which are not assigned to any specific day. Depending on the selected view, the calendar could either display a monthly (default as shown in previous figure) or weekly view. The weekly view would look like the following: ---- +------------------------------------+ | Calendar | |----------------------------(# 13)--| | Mon Tue Wed Thu Fri Sat Sun | | 29 30 31 01 02 03 04 | | <----+-- slice 1: 00:00 to 04:00 AM | -- -- -- -- -- -- | | <----+-- slice 2: 04:00 to 08:00 AM | -- -- -- -- -- -- | | <----+-- slice 3: 08:00 to 12:00 AM | - -- -- -- -- -- -- - <-+-- midday | <----+-- slice 4: 12:00 to 04:00 PM | -- -- -- -- -- -- | | <----+-- slice 5: 04:00 to 08:00 PM | -- -- -- -- -- -- | | <----+-- slice 6: 08:00 to 12:00 PM +------------------------------------+ ---- The current week number is displayed on the top-right side of the panel (*# 13* meaning it is the 13th week of the year in the above example). The seven days of the current week are displayed in column. Each day is divided into slices of 4 hours each (6 slices in total, see figure above). A slice will appear in a different color if an appointment falls into the corresponding time-slot. In the appointment panel, one can notice the *`(|)`* sign just in front of the date. This indicates the current phase of the moon. Depending on which is the current phase, the following signs can be seen: ` |) `:: first quarter ` (|) `:: full moon ` (| `:: last quarter ` | `:: new moon no sign:: Phase of the moon does not correspond to any of the above ones. At the very bottom of the screen there is a status bar, which indicates the possible actions and the corresponding keystrokes. Just above this status bar is the notify-bar, which indicates from left to right : the current date, the current time, the calendar file currently in use (apts on the above example, which is the default calendar file, see the following section), and the next appointment within the upcoming 24 hours. Here it says that it will be lunch time in one hour and twenty minutes. NOTE: Some actions, such as editing or adding an item, require to type in some text. This is done with the help of the built-in input line editor. Within this editor, if a line is longer than the screen width, a `>`, `*`, or `<` character is displayed in the last column indicating that there are more character after, before and after, or before the current position, respectively. The line is scrolled horizontally as necessary. Moreover, some editing commands are bound to particular control characters. Hereafter are indicated the available editing commands (`^` stands for the control key): `^a`:: moves the cursor to the beginning of the input line `^b`:: moves the cursor backward `^d`:: deletes one character forward `^e`:: moves the cursor to the end of the input line `^f`:: moves the cursor forward `^h`:: deletes one character backward `^k`:: deletes the input from the cursor to the end of the line `^w`:: deletes backward to the beginning of the current word `ESCAPE`:: cancels the editing [[basics_daemon]] Background mode ~~~~~~~~~~~~~~~ When the daemon mode is enabled in the notification configuration menu (see <>), `calcurse` will stay in background when the user interface is not running. In background mode, `calcurse` checks for upcoming appointments and runs the user-defined notification command when necessary. When the user interface is started again, the daemon automatically stops. `calcurse` background activity can be logged (set the `daemon.log` variable in the notification configuration <>), and in that case, information about the daemon start and stop time, reminders' command launch time, signals received... will be written in the `daemon.log` file (see section <>). Using the `--status` command line option (see section <>), one can know if `calcurse` is currently running in background or not. If the daemon is running, a message like the following one will be displayed (the pid of the daemon process will be shown): ---- calcurse is running in background (pid 14536) ---- NOTE: To stop the daemon, just send the `TERM` signal to it, using a command such as: `kill daemon_pid`, where *daemon_pid* is the process id of the daemon (14536 in the above example). [[basics_files]] calcurse files ~~~~~~~~~~~~~~ The following structure is created in your `$HOME` directory (or in the directory you specified with the -D option) the first time `calcurse` is run : ---- $HOME/.calcurse/ |___notes/ |___conf |___keys |___apts |___todo ---- `notes/`:: this subdirectory contains descriptions of the notes which are attached to appointments, events or todos. Since the file name of each note file is a SHA1 hash of the note itself, multiple items can share the same note file. calcurse provides a garbage collector (see the `-g` command line parameter) that can be used to remove note files which are no longer linked to any item. `conf`:: this file contains the user configuration `keys`:: this file contains the user-defined key bindings `apts`:: this file contains all of the events and user's appointments `todo`:: this file contains the todo list NOTE: If the logging of calcurse daemon activity was set in the notification configuration menu, the extra file `daemon.log` will appear in calcurse data directory. This file contains logs about calcurse activity when running in background. Import/Export capabilities ~~~~~~~~~~~~~~~~~~~~~~~~~~ The import and export capabilities offered by `calcurse` are described below. Import ^^^^^^ Data in icalendar format as described in the rfc2445 specification (see <> section below) can be imported into calcurse. Calcurse ical parser is based on version 2.0 of this specification, but for now on, only a subset of it is supported. The following icalendar properties are handled by calcurse: * `VTODO` items: "PRIORITY", "VALARM", "SUMMARY", "DESCRIPTION" * `VEVENT` items: "DTSTART", "DTEND", "DURATION", "RRULE", "EXDATE", "VALARM", "SUMMARY", "DESCRIPTION" The icalendar `DESCRIPTION` property will be converted into calcurse format by adding a note to the item. If a "VALARM" property is found, the item will be flagged as important and the user will get a notification (this is only applicable to appointments). Here are the properties that are not implemented: * negative time durations are not taken into account (item is skipped) * some recurence frequences are not recognize: "SECONDLY" / "MINUTELY" / "HOURLY" * some recurrence keywords are not recognized (all those starting with `BY`): "BYSECOND" / "BYMINUTE" / "BYHOUR" / "BYDAY" / "BYMONTHDAY" / "BYYEARDAY" / "BYWEEKNO" / "BYMONTH" / "BYSETPOS" plus "WKST" * the recurrence exception keyword "EXRULE" is not recognized * timezones are not taken into account Export ^^^^^^ Two possible export formats are available: `ical` and `pcal` (see section <> below to find out about those formats). Online help ~~~~~~~~~~~ At any time, the built-in help system can be invoked by pressing the `?` key. By default, it shows an introduction to the help system in an external pager. You need to exit the pager in order to get back to calcurse (pressing `q` should almost always work). The default pager can be changed by setting the PAGER environment variable. If you want to display help on a specific feature or key binding, type `:help ` (e.g. `:help add`) or `:help ` (e.g. `:help ^A`) on the main screen. Options ------- All of the `calcurse` parameters are configurable from the Configuration menu available when pressing `C`. You are then driven to a submenu with five possible choices : pressing `C` again will lead you to the Color scheme configuration, pressing `L` allows you to choose the layout of the main `calcurse` screen (in other words, where to put the three different panels on screen), pressing `G` permits you to choose between different general options, pressing `K` opens the key bindings configuration menu, and last you can modify the notify-bar settings by pressing `N`. [[options_general]] General options ~~~~~~~~~~~~~~~ These options control `calcurse` general behavior, as described below: `appearance.compactpanels` (default: *no*):: In compact panels mode, all captions are removed from panels. `appearance.defaultpanel` (default: *calendar*):: This can be used to specify the panel to be selected on startup. `general.autosave` (default: *yes*):: This option allows to automatically save the user's data (if set to *yes*) when quitting.

warning: No data will be automatically saved if `general.autosave` is set to *no*. This means the user must press `S` (for saving) in order to retrieve its modifications. `general.autogc` (default: *no*):: Automatically run the garbage collector for note files when quitting. `general.periodicsave` (default: *0*):: If different from `0`, user's data will be automatically saved every *general.periodicsave* minutes. When an automatic save is performed, two asterisks (i.e. `**`) will appear on the top right-hand side of the screen). `general.confirmquit` (default: *yes*):: If set to *yes*, confirmation is required before quitting, otherwise pressing `Q` will cause `calcurse` to quit without prompting for user confirmation. `general.confirmdelete` (default: *yes*):: If this option is set to *yes*, pressing `D` for deleting an item (either a *todo*, *appointment*, or *event*), will lead to a prompt asking for user confirmation before removing the selected item from the list. Otherwise, no confirmation will be needed before deleting the item. `general.systemdialogs` (default: *yes*):: Setting this option to *no* will result in skipping the system dialogs related to the saving and loading of data. This can be useful to speed up the input/output processes. `general.progressbar` (default: *yes*):: If set to *no*, this will cause the disappearing of the progress bar which is usually shown when saving data to file. If set to *yes*, this bar will be displayed, together with the name of the file being saved (see section <>). `appearance.calendarview` (default: *0*):: If set to `0`, the monthly calendar view will be displayed by default otherwise it is the weekly view that will be displayed. `general.firstdayofweek` (default: *monday*):: One can choose between Monday and Sunday as the first day of the week. If `general.firstdayofweek` is set to *monday*, Monday will be first in the calendar view. Otherwise, Sunday will be the first day of the week. `format.outputdate` (default: *%D*):: This option indicates the format to be used when displaying dates in non-interactive mode. Using the default values, dates are displayed the following way: *mm/dd/aa*. You can see all of the possible formats by typing `man 3 strftime` inside a terminal. `format.inputdate` (default: *1*):: This option indicates the format that will be used to enter dates in interactive mode. Four choices are available: + 1. mm/dd/yyyy 2. dd/mm/yyyy 3. yyyy/mm/dd 4. yyyy-mm-dd [[options_keys]] Key bindings ~~~~~~~~~~~~ One can define ones own key bindings within the `Keys` configuration menu. The default keys look like the one used by the `vim` editor, especially the displacement keys. Anyway, within this configuration menu, users can redefine all of the keys available from within calcurse's user interface. To define new key bindings, first highlight the action to which it will apply. Then, delete the actual key binding if necessary, and add a new one. You will then be asked to press the key corresponding to the new binding. It is possible to define more than one key binding for a single action. An automatic check is performed to see if the new key binding is not already set for another action. In that case, you will be asked to choose a different one. Another check is done when exiting from this menu, to make sure all possible actions have a key associated with it. The following keys can be used to define bindings: * lower-case, upper-case letters and numbers, such as `a`, `Z`, `0` * CONTROL-key followed by one of the above letters * escape, horizontal tab, and space keys * arrow keys (up, down, left, and right) * `HOME` and `END` keys While inside the key configuration menu, an online help is available for each one of the available actions. This help briefly describes what the highlighted action is used for. NOTE: As of calcurse 3.0.0, displacement commands can be preceded by an optional number to repeat the command. For example, `10k` will move the cursor ten weeks forwards if you use default key bindings. Color themes ~~~~~~~~~~~~ `calcurse` color theme can be customized to suit user's needs. To change the default theme, the configuration page displays possible choices for foreground and background colors. Using arrows or calcurse displacement keys to move, and `X` or space to select a color, user can preview the theme which will be applied. It is possible to keep the terminal's default colors by selecting the corresponding choice in the list. The chosen color theme will then be applied to the panel borders, to the titles, to the keystrokes, and to general informations displayed inside status bar. A black and white theme is also available, in order to support non-color terminals. NOTE: Depending on your terminal type and on the value of the `$TERM` environment variable, color could or could not be supported. An error message will appear if you try to change colors whereas your terminal does not support this feature. If you do know your terminal supports colors but could not get `calcurse` to display them, try to set your `$TERM` variable to another value (such as *xterm-xfree86* for instance). Layout configuration ~~~~~~~~~~~~~~~~~~~~ The layout corresponds to the position of the panels inside `calcurse` screen. The default layout makes the calendar panel to be displayed on the top-right corner of the terminal, the todo panel on the bottom-right corner, while the appointment panel is displayed on the left hand-side of the screen (see the figure in section <> for an example of the default layout). By choosing another layout in the configuration screen, user can customize `calcurse` appearance to best suit his needs by placing the different panels where needed. The following option is used to modify the layout configuration: `appearance.layout` (default: *0*):: Eight different layouts are to be chosen from (see layout configuration screen for the description of the available layouts). Sidebar configuration ~~~~~~~~~~~~~~~~~~~~~ The sidebar is the part of the screen which contains two panels: the calendar and, depending on the chosen layout, either the todo list or the appointment list. The following option is used to change the width of the sidebar: `appearance.sidebarwidth` (default: *0*):: Width (in percentage, 0 being the minimum width) of the side bar. [[options_notify]] Notify-bar settings ~~~~~~~~~~~~~~~~~~~ The following options are used to modify the notify-bar behavior: `appearance.notifybar` (default: *yes*):: This option indicates if you want the notify-bar to be displayed or not. `format.notifydate` (default: *%a %F*):: With this option, you can specify the format to be used to display the current date inside the notification bar. You can see all of the possible formats by typing `man 3 strftime` inside a terminal. `format.notifytime` (default: *%T*):: With this option, you can specify the format to be used to display the current time inside the notification bar. You can see all of the possible formats by typing `man 3 strftime` inside a terminal. `notification.warning` (default: *300*):: When there is an appointment which is flagged as `important` within the next `notification.warning` seconds, the display of that appointment inside the notify-bar starts to blink. Moreover, the command defined by the `notification.command` option will be launched. That way, the user is warned and knows there will be soon an upcoming appointment. `notification.command` (default: *printf '\a'*):: This option indicates which command is to be launched when there is an upcoming appointment flagged as `important`. This command will be passed to the user's shell which will interpret it. To know what shell must be used, the content of the `$SHELL` environment variable is used. If this variable is not set, `/bin/sh` is used instead. + ==== Say the `mail` command is available on the user's system, one can use the following command to get notified by mail of an upcoming appointment (the appointment description will also be mentioned in the mail body): ---- $ calcurse --next | mail -s "[calcurse] upcoming appointment!" user@host.com ---- ==== `notification.notifyall` (default: *no*):: Invert the sense of flagging an appointment as `important`. If this is enabled, all appointments will be notified - except for flagged ones. `daemon.enable` (default: *no*):: If set to yes, daemon mode will be enabled, meaning `calcurse` will run into background when the user's interface is exited. This will allow the notifications to be launched even when the interface is not running. More details can be found in section <>. `daemon.log` (default: *no*):: If set to yes, `calcurse` daemon activity will be logged (see section <>). Known bugs ---------- Incorrect highlighting of items appear when using calcurse black and white theme together with a `$TERM` variable set to *xterm-color*. To fix this bug, and as advised by Thomas E. Dickey (`xterm` maintainer), *xterm-xfree86* should be used instead of *xterm-color* to set the `$TERM` variable: ____ "The xterm-color value for $TERM is a bad choice for XFree86 xterm because it is commonly used for a `terminfo` entry which happens to not support bce. Use the xterm-xfree86 entry which is distributed with XFree86 xterm (or the similar one distributed with ncurses)." ____ [[bugs]] Reporting bugs and feedback --------------------------- Please send bug reports and feedback to: `misc .at. calcurse .dot. org`. [[contribute]] How to contribute? ------------------ If you would like to contribute to the project, you can first send your feedback on what you like or dislike, and if there are features you miss in `calcurse`. For now on, possible contributions concern the translation of `calcurse` messages and documentation. Translating documentation ~~~~~~~~~~~~~~~~~~~~~~~~~ NOTE: We recently dropped all translations of the manual files from the distribution tarball. There are plan to reintroduce them in form of a Wiki on the calcurse website. Please follow the mailing lists for up-to-date information. The *doc/* directory of the source package already contains translated version of `calcurse` manual. However, if the manual is not yet available into your native language, it would be appreciated if you could help translating it. To do so, just copy one of the existing manual file to `manual_XX.html`, where *XX* identifies your language. Then translate this newly created file and send it to the author (see <>), so that it can be included in the next `calcurse` release. calcurse i18n ~~~~~~~~~~~~~ As already mentioned, `gettext` utilities are used by `calcurse` to produce multi-lingual messages. We are currently using http://www.transifex.net/[Transifex] to manage those translations. This section provides informations about how to translate those messages into your native language. However, this howto is deliberately incomplete, focusing on working with `gettext` for `calcurse` specifically. For more comprehensive informations or to grasp the Big Picture of Native Language Support, you should refer to the `GNU gettext` manual at: http://www.gnu.org/software/gettext/manual/ IMPORTANT: Since we switched to Transifex, editing *po* files is not necessary anymore as Transifex provides a user-friendly, intuitive web interface for translators. Knowledge of `gettext` and the *po* format is still useful for those of you who prefer the command line and local editing. If you want to use the web UI to edit the translation strings, you can skip over to <> tough. Basically, three different people get involved in the translation chain: coders, language coordinator, and translators. After a quick overview of how things work, the translator tasks will be described hereafter. Overview ^^^^^^^^ To be able to display texts in the native language of the user, two steps are required: *internationalization* (i18n) and *localization* (l10n). i18n is about making `calcurse` support multiple languages. It is performed by coders, who will mark translatable texts and provide a way to display them translated at runtime. l10n is about making the i18n'ed `calcurse` adapt to the specific language of the user, ie translating the strings previously marked by the developers, and setting the environment correctly for `calcurse` to use the result of this translation. So, translatable strings are first marked by the coders within the `C` source files, then gathered in a template file (*calcurse.pot* - the *pot* extension meaning *portable object template*). The content of this template file is then merged with the translation files for each language (*fr.po* for French, for instance - with *po* standing for *portable object*, ie meant to be read and edited by humans). A given translation team will take this file, translate its strings, and send it back to the developers. At compilation time, a binary version of this file (for efficiency reasons) will be produced (*fr.mo* - *mo* stands for *machine object*, i.e. meant to be read by programs), and then installed. Then `calcurse` will use this file at runtime, translating the strings according to the locale settings of the user. Translator tasks ^^^^^^^^^^^^^^^^ Suppose someone wants to initiate the translation of a new language. Here are the steps to follow: * First, find out what the locale name is. For instance, for french, it is `fr_FR`, or simply `fr`. This is the value the user will have to put in his `LC_ALL` environment variable for software to be translated (see <>). * Then, go into the *po/* directory, and create a new po-file from the template file using the following command: `msginit -i calcurse.pot -o fr.po -l fr --no-translator` If you do not have `msginit` installed on your system, simply copy the *calcurse.pot* file to *fr.po* and edit the header by hand. Now, having this *fr.po* file, the translator is ready to begin. po-files ^^^^^^^^ The format of the po-files is quite simple. Indeed, po-files are made of four things: 1. *location lines:* tells you where the strings can be seen (name of file and line number), in case you need to see a bit of context. 2. *msgid lines:* the strings to translate. 3. *msgstr lines:* the translated strings. 4. *lines prefixed with `#`:* comments (some with a special meaning, as we will see below). Basically, all you have to do is fill the *msgstr* lines with the translation of the above *msgid* line. A few notes: *Fuzzy strings*:: You will meet strings marked with a `"#, fuzzy"` comment. `calcurse` won't use the translations of such strings until you do something about them. A string being fuzzy means either that the string has already been translated but has since been changed in the sources of the program, or that this is a new string for which `gettext` made a 'wild guess' for the translation, based on other strings in the file. It means you have to review the translation. Sometimes, the original string has changed just because a typo has been fixed. In this case, you won't have to change anything. But sometimes, the translation will no longer be accurate and needs to be changed. Once you are done and happy with the translation, just remove the `"#, fuzzy"` line, and the translation will be used again in `calcurse`. *c-format strings and special sequences*:: Some strings have the following comment: `"#, c-format"`. This tells that parts of the string to translate have a special meaning for the program, and that you should leave them alone. For instance, %-sequences, like `"%s"`. These means that `calcurse` will replace them with another string. So it is important it remains. There are also \-sequences, like `\n` or `\t`. Leave them, too. The former represents an end of line, the latter a tabulation. *Translations can be wrapped*:: If lines are too long, you can just break them like this: + ---- msgid "" "some very long line" "another line" ---- *po-file header*:: At the very beginning of the po-file, the first string form a header, where various kind of information has to be filled in. Most important one is the charset. It should resemble + ---- "Content-Type: text/plain; charset=utf-8\n" ---- + You should also fill in the Last-Translator field, so that potential contributors can contact you if they want to join you in the translation team, or have remarks/typo fixes to give about the translations. You can either just give your name/nick, or add an email address, for exemple: + ---- "Last-Translator: Frederic Culot \n" ---- *Comments*:: Adding comments (lines begining with the `#` character) can be a good way to point out problems or translation difficulties to proofreaders or other members of your team. *Strings size*:: `calcurse` is a curses/console program, thus it can be heavily dependant on the terminal size (number of columns). You should think about this when translating. Often, a string must fit into a single line (standard length is 80 characters). Don't translate blindly, try to look where your string will be displayed to adapt your translation. *A few useful tools*:: The po-file format is very simple, and the file can be edited with a standard text editor. But if you prefer, there are few specialized tools you may find convenient for translating: + * `poEdit` (http://www.poedit.org/) * `KBabel` (http://i18n.kde.org/tools/kbabel/) * `GTranslator` (http://gtranslator.sourceforge.net/) * `Emacs` po mode * `Vim` po mode *And finally*:: I hope you'll have fun contributing to a more internationalized world. :) If you have any more questions, don't hesitate to contact us at *misc .at. calcurse .dot. org*. [[transifex_uploading]] Uploading to Transifex ^^^^^^^^^^^^^^^^^^^^^^ There's several different ways to upload a finished (or semi-finished) translation for a new language to Transifex. The easiest way is to browse to the http://www.transifex.net/projects/p/calcurse/teams/[Translation Teams] page and request the addition of a new team. As soon as we accepted your request, you will be able to upload your *po* file on the http://www.transifex.net/projects/p/calcurse/resource/calcursepot/[calcurse resource page] by clicking the *Add translation* button at the bottom. Using transifex-client ^^^^^^^^^^^^^^^^^^^^^^ You can also use a command line client to submit translations instead of having to use the web interface every time you want to submit an updated version. If you have a recent version of `setuptools` installed, you can get the CLI client by issuing the following command: ---- $ easy_install -U transifex-client ---- Alternatively, you can get the source code of transifex-client at http://pypi.python.org/pypi/transifex-client. After you downloaded and installed the client, run the following commands in the calcurse source directory to checkout the translation resources of *calcurse*: ---- $ tx pull -a ---- To submit changes back to the server, use: ---- $ tx push -r calcurse.calcursepot -t -l ---- For more details, read up on `transifex-client` usage at the http://help.transifex.net/user-guide/client/[The Transifex Command-line Client v0.4] section of the http://help.transifex.net/[Transifex documentation]. [[transifex_webui]] Using the Transifex web UI ^^^^^^^^^^^^^^^^^^^^^^^^^^ As an alternative to editing *po* files, there is a web-based interface that can be used to create and update translations. After having signed up and created a new translation team (see <> on how to do that), click the *Add translation* button at the bottom on the http://www.transifex.net/projects/p/calcurse/resource/calcursepot/[calcurse resource page], select the language you'd like to translate and choose *Translate Online*. Links ----- This section contains links and references that may be of interest to you. calcurse homepage ~~~~~~~~~~~~~~~~~ The `calcurse` homepage can be found at http://calcurse.org calcurse announce list ~~~~~~~~~~~~~~~~~~~~~~ If you are interested in the project and want to be warned when a new release comes out, you can subscribe to the `calcurse` announce list. In doing so, you will receive an email as soon as a new feature appears in `calcurse`. To subscribe to this list, send a message to *announce+subscribe .at. calcurse .dot. org* with "subscribe" in the subject field. //// calcurse RSS feed ~~~~~~~~~~~~~~~~~ Another possibility to get warned when new releases come out is to follow the RSS feed at: http://calcurse.org/news_rss.xml This RSS feed is updated each time a new version of calcurse is available, describing newly added features. //// [[links_others]] Other links ~~~~~~~~~~~ You may want to look at the ical format specification (rfc2445) at: http://tools.ietf.org/html/rfc2445 The pcal project page can be found at: http://pcal.sourceforge.net/ Thanks ------ Its time now to thank other people without whom this program would not exist! So here is a list of contributing persons I would like to thank : * Alex for its patches, help and advices with `C` programming * Gwen for testing and general discussions about how to improve `calcurse` * Herbert for packaging `calcurse` for FreeBSD * Zul for packaging `calcurse` for NetBSD * Wain, Steffen and Ronald for packaging `calcurse` for Archlinux * Kevin, Ryan, and fEnIo for packaging `calcurse` for Debian and Ubuntu * Pascal for packaging `calcurse` for Slackware * Alexandre and Markus for packaging `calcurse` for Mac OsX and Darwin * Igor for packaging `calcurse` for ALT Linux * Joel for its calendar script which inspired `calcurse` calendar view * Jeremy Roon for the Dutch translation * Frédéric Culot, Toucouch, Erik Saule, Stéphane Aulery and Baptiste Jonglez for the French translation * Michael Schulz, Chris M., Benjamin Moeller and Lukas Fleischer for the German translation * Rafael Ferreira for the Portuguese (Brazil) translation * Aleksey Mechonoshin for the Russian translation * Jose Lopez for the Spanish translation * Tony for its patch which helped improving the recur_item_inday() function, and for implementing the date format configuration options * Erik Saule for its patch implementing the `-N`, `-s`, `-S`, `-r` and `-D` flags * people who write softwares I like and which inspired me, especially : - `vim` for the displacement keys - `orpheus` and `abook` for documentation - `pine` and `aptitude` for the text user interface - `tmux` for coding style And last, many many thanks to all of the `calcurse` users who sent me their feedback. calcurse-4.0.0/doc/goto.txt0000644000175000017500000000064412273003161012512 00000000000000Goto ==== Jump to a specific day in the calendar. Using this command, you do not need to travel to that day using the displacement keys inside the calendar panel. If you hit [ENTER] without specifying any date, calcurse checks the system current date and you will be taken to that date. Notice that you can also specify a global key binding to return to the current day, no matter which panel is currently selected. calcurse-4.0.0/doc/intro.txt0000644000175000017500000000125712273003161012676 00000000000000calcurse Online Help ==================== Welcome to the calcurse online help. The online help system allows for easily getting help on specific calcurse features. On the calcurse main screen, type `:help ` (e.g. `:help add`) or `:help ` (e.g. `:help ^A`) to get help on a specific feature or key binding. Type `:help` without any parameter to display this introduction or simply use the corresponding keyboard shortcut (`?` by default). All help texts are displayed using an external pager. You need to exit the pager in order to get back to calcurse (pressing `q` should almost always work). The default pager can be changed by setting the PAGER environment variable. calcurse-4.0.0/doc/vnote.txt0000644000175000017500000000127012273003161012671 00000000000000ViewNote ======== View a note which was previously attached to an item (an item which owns a note has a '>' sign in front of it). This command only permits to view the note, not to edit it (to do so, use the 'EditNote' command). Once you highlighted an item with a note attached to it, and the view note key was pressed, you will be driven to an external pager to view that note. The default pager is chosen the following way: * If the 'PAGER' environment variable is set, then this will be the default viewer to be called. * If the above environment variable is not set, then '/usr/bin/less' will be used. As for editing a note, quit the pager and you will be driven back to calcurse. calcurse-4.0.0/doc/other.txt0000644000175000017500000000052712273003161012663 00000000000000OtherCmd ======== Switch between status bar help pages. Because the terminal screen is too narrow to display all of the available commands, this command can be used to see the next set of commands together with their key bindings. Once the last status bar page is reached, running the command another time leads you back to the first page. calcurse-4.0.0/doc/priority.txt0000644000175000017500000000136512273003161013424 00000000000000Priority ======== Change the priority of the currently selected item in the todo list. Priorities are represented by the number appearing in front of the todo description. This number goes from 9 for the lowest priority to 1 for the highest priority. Todo items having higher priorities are placed first (at the top) inside the todo panel. By default, if you want to raise the priority of a todo item, you need to press '+'. In doing so, the number in front of this item will decrease, meaning its priority increases. The item position inside the todo panel may change, depending on the priority of the items above it. At the opposite, to lower a todo priority, press '-'. The todo position may also change depending on the priority of the items below. calcurse-4.0.0/doc/de/0000755000175000017500000000000012472330453011455 500000000000000calcurse-4.0.0/doc/de/import.txt0000644000175000017500000000147212273003161013444 00000000000000Import ====== Import data from an iCal file. You will be asked to enter the file name from which to load iCal items. At the end of the import process, and if the general option 'system_dialogs' is set to 'yes', a report indicating how many items were imported is shown. This report contains the total number of lines read, the number of appointments, events and todo items which were successfully imported, together with the number of items for which problems occurred and that were skipped, if any. If one or more items could not be imported, one has the possibility to read the import process report in order to identify which problems occurred. In this report is shown one item per line, with the line in the input stream at which this item begins, together with the description of why the item could not be imported. calcurse-4.0.0/doc/de/save.txt0000644000175000017500000000073712273003161013073 00000000000000Save ==== Save calcurse data. Data are split into four different files which contain : / ~/.calcurse/conf -> user configuration | (layout, color, general options) | ~/.calcurse/apts -> data related to the appointments | ~/.calcurse/todo -> data related to the todo list \ ~/.calcurse/keys -> user-defined key bindings In the config menu, you can choose to save the calcurse data automatically before quitting. calcurse-4.0.0/doc/de/delete.txt0000644000175000017500000000113212273003161013365 00000000000000Delete ====== Delete an element in the todo or appointment list. Depending on which panel is selected when you press the delete key, the highlighted item of either the todo or appointment list will be removed from this list. If the item to be deleted is recurrent, you will be asked if you wish to suppress all of the item occurrences or just the one you selected. If the general option 'confirm_delete' is set to 'YES', then you will be asked for confirmation before deleting the selected event. Do not forget to save the calendar data to retrieve the modifications next time you launch calcurse. calcurse-4.0.0/doc/de/tab.txt0000644000175000017500000000075012273003161012676 00000000000000Tab === Switch between panels. The panel currently in use has its border colorized. Some actions are possible only if the right panel is selected. For example, if you want to add a task in the todo list, you need first to press the 'TAB' key to get the todo panel selected. Then you can press 'a' to add your item. Notice that at the bottom of the screen the list of possible actions change while pressing 'TAB', so you always know what action can be performed on the selected panel. calcurse-4.0.0/doc/de/repeat.txt0000644000175000017500000000256312273003161013414 00000000000000Repeat ====== Repeat an event or an appointment. You must first select the item to be repeated by moving inside the appointment panel. Then running the repeat command will lead you to a set of three questions, with which you will be able to specify the repetition characteristics: o type: you can choose between a daily, weekly, monthly or yearly repetition by pressing 'D', 'W', 'M' or 'Y' respectively. o frequency: this indicates how often the item shall be repeated. For example, if you want to remember an anniversary, choose a 'yearly' repetition with a frequency of '1', which means it must be repeated every year. Another example: if you go to the restaurant every two days, choose a 'daily' repetition with a frequency of '2'. o ending date: this specifies when to stop repeating the selected event or appointment. To indicate an endless repetition, enter '0' and the item will be repeated forever. Notes ----- * Repeated items are marked with an '*' inside the appointment panel, to be easily recognizable from non-repeated ones. * The 'Repeat' and 'Delete' command can be mixed to create complicated configurations, as it is possible to delete only one occurrence of a repeated item. calcurse-4.0.0/doc/de/enote.txt0000644000175000017500000000172612273003161013246 00000000000000EditNote ======== Attach a note to any type of item, or edit an already existing note. This feature is useful if you do not have enough space to store all of your item description, or if you would like to add sub-tasks to an already existing todo item for example. You first need to highlight the item you want the note to be attached to. Then, after pressing the edit note key, you will be driven to an external editor to edit your note. This editor is chosen the following way: * If the 'VISUAL' environment variable is set, then this will be the default editor to be called. * If 'VISUAL' is not set, then the 'EDITOR' environment variable will be used as the default editor. * If none of the above environment variables is set, then '/usr/bin/vi' will be used. Once the item note is edited and saved, quit your favorite editor. You will then go back to calcurse, and the '>' sign will appear in front of the highlighted item, meaning there is a note attached to it. calcurse-4.0.0/doc/de/goto.txt0000644000175000017500000000064412273003161013102 00000000000000Goto ==== Jump to a specific day in the calendar. Using this command, you do not need to travel to that day using the displacement keys inside the calendar panel. If you hit [ENTER] without specifying any date, calcurse checks the system current date and you will be taken to that date. Notice that you can also specify a global key binding to return to the current day, no matter which panel is currently selected. calcurse-4.0.0/doc/de/intro.txt0000644000175000017500000000125712273003161013266 00000000000000calcurse Online Help ==================== Welcome to the calcurse online help. The online help system allows for easily getting help on specific calcurse features. On the calcurse main screen, type `:help ` (e.g. `:help add`) or `:help ` (e.g. `:help ^A`) to get help on a specific feature or key binding. Type `:help` without any parameter to display this introduction or simply use the corresponding keyboard shortcut (`?` by default). All help texts are displayed using an external pager. You need to exit the pager in order to get back to calcurse (pressing `q` should almost always work). The default pager can be changed by setting the PAGER environment variable. calcurse-4.0.0/doc/de/vnote.txt0000644000175000017500000000127012273003161013261 00000000000000ViewNote ======== View a note which was previously attached to an item (an item which owns a note has a '>' sign in front of it). This command only permits to view the note, not to edit it (to do so, use the 'EditNote' command). Once you highlighted an item with a note attached to it, and the view note key was pressed, you will be driven to an external pager to view that note. The default pager is chosen the following way: * If the 'PAGER' environment variable is set, then this will be the default viewer to be called. * If the above environment variable is not set, then '/usr/bin/less' will be used. As for editing a note, quit the pager and you will be driven back to calcurse. calcurse-4.0.0/doc/de/other.txt0000644000175000017500000000052712273003161013253 00000000000000OtherCmd ======== Switch between status bar help pages. Because the terminal screen is too narrow to display all of the available commands, this command can be used to see the next set of commands together with their key bindings. Once the last status bar page is reached, running the command another time leads you back to the first page. calcurse-4.0.0/doc/de/priority.txt0000644000175000017500000000136512273003161014014 00000000000000Priority ======== Change the priority of the currently selected item in the todo list. Priorities are represented by the number appearing in front of the todo description. This number goes from 9 for the lowest priority to 1 for the highest priority. Todo items having higher priorities are placed first (at the top) inside the todo panel. By default, if you want to raise the priority of a todo item, you need to press '+'. In doing so, the number in front of this item will decrease, meaning its priority increases. The item position inside the todo panel may change, depending on the priority of the items above it. At the opposite, to lower a todo priority, press '-'. The todo position may also change depending on the priority of the items below. calcurse-4.0.0/doc/de/add.txt0000644000175000017500000000327312273003161012663 00000000000000Hinzufügen ========== In Abhängigkeit davon welches Panel ausgewählt ist, wird entweder ein Termin oder eine Aufgabe hinzugefügt. Um einen neuen Eintrag in der Zu-erledigen-Liste zu erstellen, müssen Sie als erstes eine Beschreibung eingeben. Anschließend werden Sie aufgefordert, die Priorität anzugeben. Diese wird durch eine Skala von 9 (niedrigste Priorität) bis 1 (höchste Priorität) repräsentiert. Sie können die Priorität auch im Nachhinein noch durch die '+'- und '-'-Tasten verändern. Wenn das Terminpanel ausgewählt ist, können Sie eine neuen Termin oder ein ganztägiges Ereignis erstellen. Für letzteres drücken Sie [ENTER] anstatt eine Startuhrzeit einzugeben und geben lediglich eine Beschreibung an. Um einen neuen Termin hinzuzufügen, müssen Sie die Startuhrzeit, die Dauer (entweder per Enduhrzeit ([hh:mm]) oder per tatsächlicher Dauer ([+hh:mm], [+xxdxxhxxm] oder [+mm]) und die Beschreibung des Ereignisses angeben. Falls Sie keine Enduhrzeit oder Dauer angeben und stattdessen [ENTER] drücken, findet das Ereignis nur exakt zur Startuhrzeit statt. Der Tag, an dem das Ereignis oder der Termin stattfinden, ist der momente ausgewählte Tag im Kalender. Ergo müssen Sie vorher ggf. den korrekten Tag auswählen. Notizen ------- * Falls ein Termin bis in den nächsten Tag hinein dauert, wird er an allen entsprechenden Tagen angezeigt. Falls er nicht an dem jeweilen Tag beginnt bzw. endet, wird die Start- bzw. Endstunde durch '..' ersetzt. * Falls sie [ENTER] drücken ohne eine Beschreibung eingegeben zu haben, wird kein Eintrag hinzugefügt. * Vergessen Sie nicht, die Kalenderdaten zu speichern, um sie beim nächsten Start von Calcurse wiederherstellen zu können. calcurse-4.0.0/doc/de/displacement.txt0000644000175000017500000000151012273003161014573 00000000000000Displacement keys ================= Move around inside calcurse screens. The following scheme summarizes how to get around: move up move to previous week k K UP move left ^ move to previous day | h H LFT <-- + --> l L RGT | move right v move to next day j J DWN move to next week move down Moreover, while inside the calendar panel, the '0' key moves to the first day of the week, and the '$' key selects the last day of the week. calcurse-4.0.0/doc/de/general.txt0000644000175000017500000000226612273003161013551 00000000000000Generic key bindings ==================== Some of the key bindings apply whatever panel is selected. They are called generic key bindings. Here is the list of all the generic key bindings, together with their corresponding action: '^R' : Redraw function -> redraws calcurse panels, this is useful if you resize your terminal screen or when garbage appears inside the display '^A' : Add Appointment -> add an appointment or an event '^T' : Add TODO -> add a todo 'T' : -1 Day -> move to previous day 't' : +1 Day -> move to next day 'W' : -1 Week -> move to previous week 'w' : +1 Week -> move to next week 'M' : -1 Month -> move to previous month 'm' : +1 Month -> move to next month 'Y' : -1 Year -> move to previous year 'y' : +1 Year -> move to next year '^G' : Goto today -> move to current day The '^P' and '^N' keys are used to scroll text upward or downward when inside specific screens such the help screens for example. They are also used when the calendar screen is selected to switch between the available views (monthly and weekly calendar views). calcurse-4.0.0/doc/de/copy-paste.txt0000644000175000017500000000102512273003161014210 00000000000000Kopieren und Einfügen ===================== Kopieren und Einfügen des momenten ausgewählen Eintrages. Dies ist hilfreich, um schnell einen Eintrag von einem Tag zu einem anderen zu verschieben. Hierfür muss zunächst der zu kopierende Eintrag markiert und anschließend die der Kopier-Funktion zugewiesene Taste gedrückt werden. Sobald der neue Tag im Kalender gewählt ist, muss das Terminpanel ausgewählt und die Einfügen-Taste betätigt werden. Das Ereignis wird anschließend im Terminpanel in dem neuen Tag erscheinen. calcurse-4.0.0/doc/de/config.txt0000644000175000017500000000132712273003161013376 00000000000000Config ====== Open the configuration submenu. From this submenu, you can select between color, layout, notification and general options, and you can also configure your key bindings. The color submenu lets you choose the color theme. The layout submenu lets you choose the calcurse screen layout, in other words where to place the three different panels on the screen. The general options submenu brings a screen with the different options which modifies the way calcurse interacts with the user. The notify submenu allows you to change the notify-bar settings. The keys submenu lets you define your own key bindings. Do not forget to save the calendar data to retrieve your configuration next time you launch calcurse. calcurse-4.0.0/doc/de/view.txt0000644000175000017500000000072212273003161013101 00000000000000View ==== View the item you select in either the todo or appointment panel. This is useful when an event description is longer than the available space to display it. If that is the case, the description will be shortened and its end replaced by '...'. To be able to read the entire description, just run the view command and a popup window will appear, containing the whole event. Press any key to close the popup window and go back to the main calcurse screen. calcurse-4.0.0/doc/de/flag.txt0000644000175000017500000000132312273003161013036 00000000000000Flag Item ========= Toggle an appointment's 'important' flag or a todo's 'completed' flag. If a todo is flagged as completed, its priority number will be replaced by an 'X' sign. Completed tasks will no longer appear in exported data or when using the '-t' command line flag (unless specifying '0' as the priority number, in which case only completed tasks will be shown). If an appointment is flagged as important, an exclamation mark appears in front of it, and you will be warned if time gets closed to the appointment start time. To customize the way one gets notified, the configuration submenu lets you choose the command launched to warn user of an upcoming appointment, and how long before it he gets notified. calcurse-4.0.0/doc/de/edit.txt0000644000175000017500000000177412273003161013064 00000000000000Edit Item ========= Edit the item which is currently selected. Depending on the item type (appointment, event or todo) and item repetition, you will be asked to choose one of the item properties to modify. An item property is one of the following: the start time, the end time, the description, or the item repetition. You can also move an item, that is, move an item without changing its duration. Once you have chosen the property you want to modify, you will be shown its actual value, and you will be able to change it as you like. Notes ----- * If you choose to edit the item repetition properties, you will be asked to re-enter all of the repetition characteristics (repetition type, frequency, and ending date). Moreover, the previous data concerning the deleted occurrences will be lost. * You can enter an empty end time to convert an existing appointment into a punctual appointment. * Do not forget to save the calendar data to retrieve the modified properties next time you launch Calcurse. calcurse-4.0.0/doc/de/pipe.txt0000644000175000017500000000040512273003161013062 00000000000000Pipe ==== Das ausgewählte Item an ein externes Programm weiterleiten. Drücken Sie die '|'-Taste (Pipe), um den momentan ausgewählten Eintrag an ein externes Programm weiterzugeben. Sie werden zurück zu Calcurse geleitet, sobald das Programm beendet ist. calcurse-4.0.0/doc/de/credits.txt0000644000175000017500000000133012472326722013574 00000000000000Calcurse - text-based organizer =============================== Copyright (c) 2004-2015 calcurse Development Team All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Send your feedback or comments to : misc@calcurse.org Calcurse home page : http://calcurse.org calcurse-4.0.0/doc/de/export.txt0000644000175000017500000000103412273003161013445 00000000000000Export ====== Export calcurse data (appointments, events and todos). This leads to the export submenu, from which you can choose between two different export formats: 'ical' and 'pcal'. Choosing one of those formats lets you export calcurse data to iCal or pcal format. You first need to specify the file to which the data will be exported. By default, this file is: ~/calcurse.ics for an ical export, and: ~/calcurse.txt for a pcal export. calcurse data are exported in the following order: events, appointments, todos. calcurse-4.0.0/doc/add.txt0000644000175000017500000000326012273003161012267 00000000000000Add === Add an item in either the todo or appointment list, depending on which panel is selected. To enter a new item in the todo list, you will need first to enter the description of this new item. Then you will be asked to specify the todo priority. This priority is represented by a number going from 9 for the lowest priority, to 1 for the highest one. It is still possible to change the item priority afterwards, by using the '+' and '-' keys inside the todo panel. If the appointment panel is selected, you will be able to enter either a new appointment or a new all-day long event. To enter a new event, press [ENTER] instead of the item start time, and just fill in the event description. To enter a new appointment to be added in the appointment list, you will need to enter successively the time at which the appointment begins, the appointment length (either by specifying the end time in [hh:mm] or the duration in [+hh:mm], [+xxdxxhxxm] or [+mm] format), and the description of the event. If you skip the end time by pressing [ENTER], a punctual appointment will be created. The day at which occurs the event or appointment is the day currently selected in the calendar, so you need to move to the desired day before. Notes ----- * If an appointment lasts for such a long time that it continues on the next days, this event will be indicated on all the corresponding days, and the beginning or ending hour will be replaced by '..' if the event does not begin or end on the day. * If you only press [ENTER] at the description prompt, without any description, no item will be added. * Do not forget to save the calendar data to retrieve the new event next time you launch calcurse. calcurse-4.0.0/doc/displacement.txt0000644000175000017500000000151012273003161014203 00000000000000Displacement keys ================= Move around inside calcurse screens. The following scheme summarizes how to get around: move up move to previous week k K UP move left ^ move to previous day | h H LFT <-- + --> l L RGT | move right v move to next day j J DWN move to next week move down Moreover, while inside the calendar panel, the '0' key moves to the first day of the week, and the '$' key selects the last day of the week. calcurse-4.0.0/doc/general.txt0000644000175000017500000000226612273003161013161 00000000000000Generic key bindings ==================== Some of the key bindings apply whatever panel is selected. They are called generic key bindings. Here is the list of all the generic key bindings, together with their corresponding action: '^R' : Redraw function -> redraws calcurse panels, this is useful if you resize your terminal screen or when garbage appears inside the display '^A' : Add Appointment -> add an appointment or an event '^T' : Add TODO -> add a todo 'T' : -1 Day -> move to previous day 't' : +1 Day -> move to next day 'W' : -1 Week -> move to previous week 'w' : +1 Week -> move to next week 'M' : -1 Month -> move to previous month 'm' : +1 Month -> move to next month 'Y' : -1 Year -> move to previous year 'y' : +1 Year -> move to next year '^G' : Goto today -> move to current day The '^P' and '^N' keys are used to scroll text upward or downward when inside specific screens such the help screens for example. They are also used when the calendar screen is selected to switch between the available views (monthly and weekly calendar views). calcurse-4.0.0/doc/copy-paste.txt0000644000175000017500000000074112273003161013624 00000000000000Copy and Paste ============== Copy and paste the currently selected item. This is useful to quickly copy an item from one date to another. To do so, one must first highlight the item that needs to be copied, then press the key assigned to the copy function. Once the new date is chosen in the calendar, the appointment panel must be selected and the paste key must be pressed to paste the item. The item will appear in the appointment panel, assigned to the newly selected date. calcurse-4.0.0/doc/submitting-patches.html0000644000175000017500000005710712472330442015515 00000000000000 CALCURSE - Submitting Patches

This is a short summary of guidelines you should try to follow when submitting patches to calcurse.

1. Fetching the most recent source

The whole source code currently is under version control using Git as VCS. You can retrieve a local copy of the development tree using:

$ git clone git://git.calcurse.org/calcurse.git

This will create a new directory calcurse that contains the cloned repository.

If you want to follow the maintenance branch (maint) as well (e.g. to create a bug fix), setting up a tracking branch is recommended:

$ git branch -t maint origin/maint

2. Creating a working branch

Whenever you want to work on a new feature, do it in a separate branch. Having diverging commits in the master branch might cause conflicts when pulling in new changes. Thus, creating a new development branch before doing any changes is good practice. And even before doing that, you should update the master branch of your working copy:

$ git checkout master
$ git pull origin master
$ git checkout -b wip

You can replace wip by any name you like.

Maintenance patches such as bug fixes and stability improvements should be based on the maint branch instead:

$ git checkout maint
$ git pull origin maint
$ git checkout -b wip-maint

3. Committing the changes

Edit files in the source tree and test your changes. When everything seems to be fine, you’re ready to commit to your local working tree:

$ git commit -as

If you added or removed files, you probably need to run git add or git rm before committing so that Git is aware of them.

If you work on more than a small bug fix, you should split your work into several commits. Try to keep your commits small and focused. Smaller patches are way easier to review and have a better chance of being included in mainline development.

Also try to make your commit messages brief and descriptive. The first line of the commit message should be a short description (not more than 50 characters) and should use imperative, present tense. If there are details that cannot be expressed in these size constraints, put them in separate text paragraphs separated by blank lines and wrapped to 72 columns. If you use Vim, gitcommit.vim will do most of the job for you.

Here’s a sample commit message:

Invoke vars_init() before importing data with "-i"

We forgot to call vars_init() when importing an item using the "-i"
command line argument, which led to the pager configuration variable
being unset and hence the pager invocation (triggered to show the log in
case there are any errors during import) failing.

Fix this by calling vars_init() before io_import_data().

Reported-by: Andraž 'ruskie' Levstik <ruskie@codemages.net>
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>

The -s in the git commit invocation makes Git add a "Signed-off-by" line to credit yourself and to confirm that your contribution was created in whole or in part by you and you have the right to submit it under the BSD license. Please do not remove that line when editing the commit message.

4. Creating a patch series

As soon as you finished all your work, test everything again and create a patch series:

$ git format-patch master

Replace master by maint if your development branch is based on the maintenance branch:

$ git format-patch maint

5. Submitting patches

Send your patch series to one of the mailing lists:

$ git send-email *.patch

The bugs mailing list should be used for bug fixes, misc should be used for everything else.

You can also add a cover letter and/or add annotations to patches:

$ git send-email --cover-letter --annotate *.patch

Additional information on the particular patches, which shouldn’t appear in the commit message itself, can be added immediately after the ---.

6. Importing patches

Git also provides a tool for importing a patch series submitted via git send-email. Just save all mails that contain patches into mbox files and use git am to apply them to your working branch:

$ git am <mbox>...

If you use mutt, you can also add following macro to apply the patch contained in the current mail to your local Git repository by pressing A:

set mbox_type=mbox
set my_git_repo_path=$HOME/src/calcurse

macro index,pager A "<pipe-message>(cd $my_git_repo_path && git am)<enter>"

To setup different Git repositories per mailing list (in case you follow several different development lists), simply bind the macro to a folder-hook or to a message-hook and use different repository paths per hook.


calcurse-4.0.0/doc/calcurse.10000644000175000017500000005356312472330452012703 00000000000000'\" t .\" Title: calcurse .\" Author: [see the "Authors" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 02/22/2015 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" .TH "CALCURSE" "1" "02/22/2015" "\ \&" "\ \&" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" calcurse \- text\-based organizer .SH "SYNOPSIS" .sp .nf \fIcalcurse\fR \fB\-Q\fR [options] [\fB\-\-from\fR ] [\fB\-\-to\fR |\fB\-\-days\fR ] \fIcalcurse\fR \fB\-G\fR [options] \fIcalcurse\fR \fB\-i\fR \fIcalcurse\fR \fB\-x\fR \fIcalcurse\fR \fB\-\-gc\fR \fIcalcurse\fR \fB\-\-status\fR \fIcalcurse\fR \fB\-\-version\fR \fIcalcurse\fR \fB\-\-help\fR .fi .SH "DESCRIPTION" .sp Calcurse is a text\-based calendar and scheduling application\&. It helps keeping track of events, appointments and everyday tasks\&. A configurable notification system reminds user of upcoming deadlines, and the curses based interface can be customized to suit user needs\&. All of the commands are documented within an online help system\&. .SH "OPTIONS" .sp The following options are supported: .PP \fB\-a\fR, \fB\-\-appointment\fR .RS 4 Print the appointments and events for the current day and exit\&. Equivalent to \fB\-Q \-\-filter\-type cal\fR\&. \fINote:\fR The calendar from which to read the appointments can be specified using the \fB\-c\fR flag\&. .RE .PP \fB\-c\fR , \fB\-\-calendar\fR .RS 4 Specify the calendar file to use\&. The default calendar is \fB~/\&.calcurse/apts\fR (see section \fIFILES\fR below)\&. This option has precedence over \fB\-D\fR\&. .RE .PP \fB\-d\fR , \fB\-\-day\fR .RS 4 Print the appointments for the given date or for the given number of upcoming days, depending on the argument format\&. Two possible formats are supported: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} a date (possible formats described below)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} a number \fBn\fR\&. .RE .sp In the first case, the appointment list for the specified date will be returned, while in the second case the appointment list for the \fBn\fR upcoming days will be returned\&. .sp As an example, typing \fBcalcurse \-d 3\fR will display your appointments for today, tomorrow, and the day after tomorrow\&. The first form is equivalent to \fB\-Q \-\-filter\-type cal \-\-from \fR, the second form is equivalent to \fB\-Q \-\-filter\-type cal \-\-days \fR\&. .sp \fINote:\fR as for the \fB\-a\fR flag, the calendar from which to read the appointments can be specified using the \fB\-c\fR flag\&. .RE .PP \fB\-\-days\fR .RS 4 Specify the length of the range (in days) when used with \fB\-Q\fR\&. Cannot be combined with \fB\-\-to\fR\&. .RE .PP \fB\-D\fR , \fB\-\-directory\fR .RS 4 Specify the data directory to use\&. If not specified, the default directory is \fB~/\&.calcurse/\fR\&. .RE .PP \fB\-\-filter\-type\fR .RS 4 Ignore any items that do not match the type mask\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-pattern\fR .RS 4 Ignore any items with a description that does not match the pattern\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-start\-from\fR .RS 4 Ignore any items that start before a given date\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-start\-to\fR .RS 4 Ignore any items that start after a given date\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-start\-after\fR .RS 4 Only include items that start after a given date\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-start\-before\fR .RS 4 Only include items that start before a given date\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-start\-range\fR .RS 4 Only include items within a given range\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-end\-from\fR .RS 4 Ignore any items that end before a given date\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-end\-to\fR .RS 4 Ignore any items that end after a given date\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-end\-after\fR .RS 4 Only include items that end after a given date\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-end\-before\fR .RS 4 Only include items that end before a given date\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-end\-range\fR .RS 4 Only include items within a given range\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-priority\fR .RS 4 Only include items with a given priority\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-completed\fR .RS 4 Only include completed TODO items\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-filter\-uncompleted\fR .RS 4 Only include uncompleted TODO items\&. See \fIFILTERS\fR for details\&. .RE .PP \fB\-\-format\-apt\fR .RS 4 Specify a format to control the output of appointments in non\-interactive mode\&. See the \fIFORMAT STRINGS\fR section for detailed information on format strings\&. .RE .PP \fB\-\-format\-recur\-apt\fR .RS 4 Specify a format to control the output of recurrent appointments in non\-interactive mode\&. See the \fIFORMAT STRINGS\fR section for detailed information on format strings\&. .RE .PP \fB\-\-format\-event\fR .RS 4 Specify a format to control the output of events in non\-interactive mode\&. See the \fIFORMAT STRINGS\fR section for detailed information on format strings\&. .RE .PP \fB\-\-format\-recur\-event\fR .RS 4 Specify a format to control the output of recurrent events in non\-interactive mode\&. See the \fIFORMAT STRINGS\fR section for detailed information on format strings\&. .RE .PP \fB\-\-format\-todo\fR .RS 4 Specify a format to control the output of todo items in non\-interactive mode\&. See the \fIFORMAT STRINGS\fR section for detailed information on format strings\&. .RE .PP \fB\-\-from\fR .RS 4 Specify the start date of the range when used with \fB\-Q\fR\&. .RE .PP \fB\-g\fR, \fB\-\-gc\fR .RS 4 Run the garbage collector for note files and exit\&. .RE .PP \fB\-G\fR, \fB\-\-grep\fR .RS 4 Print appointments and TODO items using the calcurse data file format\&. The filter interface can be used to further restrict the output\&. See also: \fIFILTERS\fR\&. .RE .PP \fB\-h\fR, \fB\-\-help\fR .RS 4 Print a short help text describing the supported command\-line options, and exit\&. .RE .PP \fB\-i\fR , \fB\-\-import\fR .RS 4 Import the icalendar data contained in \fIfile\fR\&. .RE .PP \fB\-l\fR , \fB\-\-limit\fR .RS 4 Limit the number of results printed to \fInum\fR\&. .RE .PP \fB\-n\fR, \fB\-\-next\fR .RS 4 Print the next appointment within upcoming 24 hours and exit\&. The indicated time is the number of hours and minutes left before this appointment\&. .sp \fINote:\fR the calendar from which to read the appointments can be specified using the \fB\-c\fR flag\&. .RE .PP \fB\-Q\fR, \fB\-\-query\fR .RS 4 Print all appointments inside a given query range, followed by all TODO items\&. The query range defaults to the current day and can be changed by using the \fB\-\-from\fR and \fB\-\-to\fR (or \fB\-\-days\fR) parameters\&. The filter interface can be used to further restrict the output\&. See also: \fIFILTERS\fR\&. .RE .PP \fB\-r\fR[num], \fB\-\-range\fR[=num] .RS 4 Print events and appointments for the \fInum\fR number of days and exit\&. If no \fInum\fR is given, a range of 1 day is considered\&. Equivalent to \fB\-Q \-\-filter\-type cal \-\-days \fR\&. .RE .PP \fB\-\-read\-only\fR .RS 4 Don\(cqt save configuration nor appointments/todos\&. .sp \fIWarning:\fR Use this this with care! If you run an interactive calcurse instance in read\-only mode, all changes from this session will be lost without warning! .RE .PP \fB\-s\fR[date], \fB\-\-startday\fR[=date] .RS 4 Print events and appointments from \fIdate\fR and exit\&. If no \fIdate\fR is given, the current day is considered\&. Equivalent to \fB\-Q \-\-filter\-type cal \-\-from \fR\&. .RE .PP \fB\-S\fR, \fB\-\-search\fR= .RS 4 When used with the \fB\-a\fR, \fB\-d\fR, \fB\-r\fR, \fB\-s\fR, or \fB\-t\fR flag, print only the items having a description that matches the given regular expression\&. Equivalent to \fB\-Q \-\-filter\-pattern \fR\&. .RE .PP \fB\-\-status\fR .RS 4 Display the status of running instances of calcurse\&. If calcurse is running, this will tell if the interactive mode was launched or if calcurse is running in background\&. The process pid will also be indicated\&. .RE .PP \fB\-t\fR[num], \fB\-\-todo\fR[=num] .RS 4 Print the \fBtodo\fR list and exit\&. If the optional number \fInum\fR is given, then only todos having a priority equal to \fInum\fR will be returned\&. The priority number must be between 1 (highest) and 9 (lowest)\&. It is also possible to specify \fB0\fR for the priority, in which case only completed tasks will be shown\&. Equivalent to \fB\-Q \-\-filter\-type todo\fR, combined with \fB\-\-filter\-priority\fR and \fB\-\-filter\-completed\fR or \fB\-\-filter\-uncompleted\fR\&. .RE .PP \fB\-\-to\fR .RS 4 Specify the end date of the range when used with \fB\-Q\fR\&. Cannot be combined with \fB\-\-days\fR\&. .RE .PP \fB\-v\fR, \fB\-\-version\fR .RS 4 Display \fBcalcurse\fR version and exit\&. .RE .PP \fB\-x\fR[format], \fB\-\-export\fR[=format] .RS 4 Export user data to specified format\&. Events, appointments and todos are converted and echoed to stdout\&. Two possible formats are available: \fIical\fR and \fIpcal\fR\&. If the optional argument \fIformat\fR is not given, ical format is selected by default\&. .sp \fINote:\fR redirect standard output to export data to a file, by issuing a command such as: .sp .if n \{\ .RS 4 .\} .nf $ calcurse \-\-export > my_data\&.dat .fi .if n \{\ .RE .\} .RE .sp \fINote:\fR The \fB\-N\fR option has been removed in calcurse 3\&.0\&.0\&. See the \fIFORMAT STRINGS\fR section on how to print note along with appointments and events\&. .SH "FILTERS" .sp Filters can be used to restrict the set of items which are loaded from the appointments file when using calcurse in non\-interactive mode\&. The following filters are currently supported: .PP \fB\-\-filter\-type\fR .RS 4 Ignore any items that do not match the type mask\&. The type mask is a comma\-separated list of valid type descriptions which include \fIevent\fR, \fIapt\fR, \fIrecur\-event\fR, \fIrecur\-apt\fR and \fItodo\fR\&. You can also use \fIrecur\fR as a shorthand for \fIrecur\-event,recur\-apt\fR and \fIcal\fR as a shorthand for \fIevent,apt,recur\fR\&. .RE .PP \fB\-\-filter\-pattern\fR .RS 4 Ignore any items with a description that does not match the pattern\&. The pattern is interpreted as extended regular expression\&. .RE .PP \fB\-\-filter\-start\-from\fR .RS 4 Ignore any items that start before a given date\&. .RE .PP \fB\-\-filter\-start\-to\fR .RS 4 Ignore any items that start after a given date\&. .RE .PP \fB\-\-filter\-start\-after\fR .RS 4 Only include items that start after a given date\&. .RE .PP \fB\-\-filter\-start\-before\fR .RS 4 Only include items that start before a given date\&. .RE .PP \fB\-\-filter\-start\-range\fR .RS 4 Only include items with a start date that falls within a given range\&. A range consists of a start date and an end date, separated by a comma\&. .RE .PP \fB\-\-filter\-end\-from\fR .RS 4 Ignore any items that end before a given date\&. .RE .PP \fB\-\-filter\-end\-to\fR .RS 4 Ignore any items that end after a given date\&. .RE .PP \fB\-\-filter\-end\-after\fR .RS 4 Only include items that end after a given date\&. .RE .PP \fB\-\-filter\-end\-before\fR .RS 4 Only include items that end before a given date\&. .RE .PP \fB\-\-filter\-end\-range\fR .RS 4 Only include items with an end date that falls within a given range\&. A range consists of a start date and an end date, separated by a comma\&. .RE .PP \fB\-\-filter\-priority\fR .RS 4 Only include items with a given priority\&. .RE .PP \fB\-\-filter\-completed\fR .RS 4 Only include completed TODO items\&. .RE .PP \fB\-\-filter\-uncompleted\fR .RS 4 Only include uncompleted TODO items\&. .RE .SH "FORMAT STRINGS" .sp Format strings are composed of printf()\-style format specifiers \(em ordinary characters are copied to stdout without modification\&. Each specifier is introduced by a \fB%\fR and is followed by a character which specifies the field to print\&. The set of available fields depends on the item type\&. .SS "Format specifiers for appointments" .PP \fBs\fR .RS 4 Print the start time of the appointment as UNIX time stamp .RE .PP \fBS\fR .RS 4 Print the start time of the appointment using the \fBhh:mm\fR format .RE .PP \fBd\fR .RS 4 Print the duration of the appointment in seconds .RE .PP \fBe\fR .RS 4 Print the end time of the appointment as UNIX time stamp .RE .PP \fBE\fR .RS 4 Print the end time of the appointment using the \fBhh:mm\fR format .RE .PP \fBm\fR .RS 4 Print the description of the item .RE .PP \fBn\fR .RS 4 Print the name of the note file belonging to the item .RE .PP \fBN\fR .RS 4 Print the note belonging to the item .RE .SS "Format specifiers for events" .PP \fBm\fR .RS 4 Print the description of the item .RE .PP \fBn\fR .RS 4 Print the name of the note file belonging to the item .RE .PP \fBN\fR .RS 4 Print the note belonging to the item .RE .SS "Format specifiers for todo items" .PP \fBp\fR .RS 4 Print the priority of the item .RE .PP \fBm\fR .RS 4 Print the description of the item .RE .PP \fBn\fR .RS 4 Print the name of the note file belonging to the item .RE .PP \fBN\fR .RS 4 Print the note belonging to the item .RE .SS "Examples" .PP \fBcalcurse \-r7 \-\-format\-apt=\*(Aq\- %S \-> %E\en\et%m\en%N\*(Aq\fR .RS 4 Print appointments and events for the next seven days\&. Also, print the notes attached to each regular appointment (simulates \fB\-N\fR for appointments)\&. .RE .PP \fBcalcurse \-r7 \-\-format\-apt=\*(Aq \- %m (%S to %E)\en\*(Aq \-\-format\-recur\-apt=\*(Aq \- %m (%S to %E)\en\*(Aq\fR .RS 4 Print appointments and events for the next seven days and use a custom format for (recurrent) appointments: * \- Some appointment (18:30 to 21:30)*\&. .RE .PP \fBcalcurse \-t \-\-format\-todo \*(Aq(%p) %m\en\*(Aq\fR .RS 4 List all todo items and put parentheses\&around the priority specifiers\&. .RE .SS "Extended format specifiers" .sp Extended format specifiers can be used if you want to specify advanced formatting options\&. Extended specifiers are introduced by \fB%(\fR and are terminated by a closing parenthesis (\fB)\fR)\&. The following list includes all short specifiers and corresponding long options: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBs\fR: \fB(start)\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBS\fR: \fB(start:epoch)\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBe\fR: \fB(end)\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBE\fR: \fB(end:epoch)\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBd\fR: \fB(duration)\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBr\fR: \fB(remaining)\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBm\fR: \fB(message)\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBn\fR: \fB(noteid)\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBN\fR: \fB(note)\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBp\fR: \fB(priority)\fR .RE .sp The \fB(start)\fR and \fB(end)\fR specifiers support strftime()\-style extended formatting options that can be used for fine\-grained formatting\&. Additionally, the special formats \fBepoch\fR (which is equivalent to \fB(start:%s)\fR or \fB(end:%s)\fR) and \fBdefault\fR (which is mostly equivalent to \fB(start:%H:%M)\fR or \fB(end:%H:%M)\fR but displays \fB\&.\&.:\&.\&.\fR if the item doesn\(cqt start/end at the current day) are supported\&. .sp The \fB(remaining)\fR and \fB(duration)\fR specifiers support a subset of the strftime()\-style formatting options, along with two extra qualifiers\&. The supported options are \fB%d\fR, \fB%H\fR, \fB%M\fR and \fB%S\fR, and by default each of these is zero\-padded to two decimal places\&. To avoid the zero\-padding, add \fB\-\fR in front of the formatting option (for example, \fB%\-d\fR)\&. Additionally, the \fBE\fR option will display the total number of time units until the appointment, rather than showing the remaining number of time units modulo the next larger time unit\&. For example, an appointment in 50 hours will show as 02:00 with the formatting string \fB%H:%M\fR, but will show 50:00 with the formatting string \fB%EH:%M\fR\&. Note that if you are combining the \fB\-\fR and \fBE\fR options, the \fB\-\fR must come first\&. The default format for the \fB(remaining)\fR specifier is \fB%EH:%M\fR\&. .SH "NOTES" .sp Calcurse interface contains three different panels (calendar, appointment list, and todo list) on which you can perform different actions\&. All the possible actions, together with their associated keystrokes, are listed on the status bar\&. This status bar takes place at the bottom of the screen\&. .sp At any time, the built\-in help system can be invoked by pressing the \fI?\fR key\&. Once viewing the help screens, informations on a specific command can be accessed by pressing the keystroke corresponding to that command\&. .SH "CONFIGURATION" .sp The calcurse options can be changed from the configuration menu (shown when \fIC\fR is hit)\&. Five possible categories are to be chosen from : the color scheme, the layout (the location of the three panels on the screen), notification options, key bindings configuration menu, and more general options (such as automatic save before quitting)\&. All of these options are detailed in the configuration menu\&. .SH "FILES" .sp The following structure is created in your $HOME directory (or in the directory you specified with the \fB\-D\fR option), the first time calcurse is run: .sp .if n \{\ .RS 4 .\} .nf $HOME/\&.calcurse/ |___notes/ |___conf |___keys |___apts |___todo .fi .if n \{\ .RE .\} .sp The \fInotes\fR subdirectory contains descriptions of the notes which are attached to appointments, events or todos\&. One text file is created per note, whose name is the SHA1 message digest of the note itself\&. .sp The \fIconf\fR file contains the user configuration\&. The \fIkeys\fR file contains the user\-defined key bindings\&. The \fIapts\fR file contains all of the user\(cqs appointments and events, and the \fItodo\fR file contains the todo list\&. .sp \fINote:\fR if the logging of calcurse daemon activity was set in the notification configuration menu, the extra file \fIdaemon\&.log\fR will appear in calcurse data directory\&. This file contains logs about calcurse activity when running in background\&. .SH "ENVIRONMENT" .sp This section describes the environment variables that affect how calcurse operates\&. .PP \fBVISUAL\fR .RS 4 Specifies the external editor to use for writing notes\&. .RE .PP \fBEDITOR\fR .RS 4 If the \fIVISUAL\fR environment variable is not set, then \fIEDITOR\fR will be used as the default external editor\&. If none of those variables are set, then \fI/usr/bin/vi\fR is used instead\&. .RE .PP \fBPAGER\fR .RS 4 Specifies the default viewer to be used for reading notes\&. If this variable is not set, then \fI/usr/bin/less\fR is used\&. .RE .SH "BUGS" .sp Incorrect highlighting of items appear when using calcurse black and white theme together with a \fB$TERM\fR variable set to \fIxterm\-color\fR\&. To fix this bug, and as advised by Thomas E\&. Dickey (xterm maintainer), \fIxterm\-xfree86\fR should be used instead of \fIxterm\-color\fR to set the \fB$TERM\fR variable: .sp .if n \{\ .RS 4 .\} .nf "The xterm\-color value for $TERM is a bad choice for XFree86 xterm because it is commonly used for a terminfo entry which happens to not support bce\&. Use the xterm\-xfree86 entry which is distributed with XFree86 xterm (or the similar one distributed with ncurses)\&." .fi .if n \{\ .RE .\} .sp If you find other bugs, please send a report to bugs@calcurse\&.org or to one of the authors, below\&. .SH "SEE ALSO" .sp vi(1), less(1), ncurses(3), mkstemp(3) .sp The ical specification (rfc2445) can be found at: http://tools\&.ietf\&.org/html/rfc2445 .sp The pcal project page: http://pcal\&.sourceforge\&.net/ .sp Calcurse home page: http://calcurse\&.org/ .sp Calcurse complete manual, translated in many languages and maintained in html format, can be found in the doc/ directory of the source package, or at: http://calcurse\&.org/files/manual\&.html .SH "AUTHORS" .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBFrederic Culot\fR .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} \fBLukas Fleischer\fR .RE .SH "COPYRIGHT" .sp Copyright (c) 2004\-2015 calcurse Development Team\&. This software is released under the BSD License\&. calcurse-4.0.0/doc/config.txt0000644000175000017500000000132712273003161013006 00000000000000Config ====== Open the configuration submenu. From this submenu, you can select between color, layout, notification and general options, and you can also configure your key bindings. The color submenu lets you choose the color theme. The layout submenu lets you choose the calcurse screen layout, in other words where to place the three different panels on the screen. The general options submenu brings a screen with the different options which modifies the way calcurse interacts with the user. The notify submenu allows you to change the notify-bar settings. The keys submenu lets you define your own key bindings. Do not forget to save the calendar data to retrieve your configuration next time you launch calcurse. calcurse-4.0.0/doc/view.txt0000644000175000017500000000072212273003161012511 00000000000000View ==== View the item you select in either the todo or appointment panel. This is useful when an event description is longer than the available space to display it. If that is the case, the description will be shortened and its end replaced by '...'. To be able to read the entire description, just run the view command and a popup window will appear, containing the whole event. Press any key to close the popup window and go back to the main calcurse screen. calcurse-4.0.0/doc/flag.txt0000644000175000017500000000132312273003161012446 00000000000000Flag Item ========= Toggle an appointment's 'important' flag or a todo's 'completed' flag. If a todo is flagged as completed, its priority number will be replaced by an 'X' sign. Completed tasks will no longer appear in exported data or when using the '-t' command line flag (unless specifying '0' as the priority number, in which case only completed tasks will be shown). If an appointment is flagged as important, an exclamation mark appears in front of it, and you will be warned if time gets closed to the appointment start time. To customize the way one gets notified, the configuration submenu lets you choose the command launched to warn user of an upcoming appointment, and how long before it he gets notified. calcurse-4.0.0/doc/submitting-patches.txt0000644000175000017500000001423312472326722015367 00000000000000//// /* * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ //// CALCURSE - Submitting Patches ============================= This is a short summary of guidelines you should try to follow when submitting patches to calcurse. Fetching the most recent source ------------------------------- The whole source code currently is under version control using Git as VCS. You can retrieve a local copy of the development tree using: ---- $ git clone git://git.calcurse.org/calcurse.git ---- This will create a new directory `calcurse` that contains the cloned repository. If you want to follow the maintenance branch (`maint`) as well (e.g. to create a bug fix), setting up a tracking branch is recommended: ---- $ git branch -t maint origin/maint ---- Creating a working branch ------------------------- Whenever you want to work on a new feature, do it in a separate branch. Having diverging commits in the `master` branch might cause conflicts when pulling in new changes. Thus, creating a new development branch *before* doing any changes is good practice. And even before doing that, you should update the master branch of your working copy: ---- $ git checkout master $ git pull origin master $ git checkout -b wip ---- You can replace `wip` by any name you like. Maintenance patches such as bug fixes and stability improvements should be based on the `maint` branch instead: ---- $ git checkout maint $ git pull origin maint $ git checkout -b wip-maint ---- Committing the changes ---------------------- Edit files in the source tree and test your changes. When everything seems to be fine, you're ready to commit to your local working tree: ---- $ git commit -as ---- If you added or removed files, you probably need to run `git add` or `git rm` before committing so that Git is aware of them. If you work on more than a small bug fix, you should split your work into several commits. Try to keep your commits small and focused. Smaller patches are way easier to review and have a better chance of being included in mainline development. Also try to make your commit messages brief and descriptive. The first line of the commit message should be a short description (not more than 50 characters) and should use imperative, present tense. If there are details that cannot be expressed in these size constraints, put them in separate text paragraphs separated by blank lines and wrapped to 72 columns. If you use Vim, `gitcommit.vim` will do most of the job for you. Here's a sample commit message: ---- Invoke vars_init() before importing data with "-i" We forgot to call vars_init() when importing an item using the "-i" command line argument, which led to the pager configuration variable being unset and hence the pager invocation (triggered to show the log in case there are any errors during import) failing. Fix this by calling vars_init() before io_import_data(). Reported-by: Andraž 'ruskie' Levstik Signed-off-by: Lukas Fleischer ---- The `-s` in the `git commit` invocation makes Git add a "Signed-off-by" line to credit yourself and to confirm that your contribution was created in whole or in part by you and you have the right to submit it under the BSD license. Please do not remove that line when editing the commit message. Creating a patch series ----------------------- As soon as you finished all your work, test everything again and create a patch series: ---- $ git format-patch master ---- Replace `master` by `maint` if your development branch is based on the maintenance branch: ---- $ git format-patch maint ---- Submitting patches ------------------ Send your patch series to one of the mailing lists: ---- $ git send-email *.patch ---- The `bugs` mailing list should be used for bug fixes, `misc` should be used for everything else. You can also add a cover letter and/or add annotations to patches: ---- $ git send-email --cover-letter --annotate *.patch ---- Additional information on the particular patches, which shouldn't appear in the commit message itself, can be added immediately after the `---`. Importing patches ----------------- Git also provides a tool for importing a patch series submitted via `git send-email`. Just save all mails that contain patches into mbox files and use `git am` to apply them to your working branch: ---- $ git am ... ---- If you use mutt, you can also add following macro to apply the patch contained in the current mail to your local Git repository by pressing `A`: ---- set mbox_type=mbox set my_git_repo_path=$HOME/src/calcurse macro index,pager A "(cd $my_git_repo_path && git am)" ---- To setup different Git repositories per mailing list (in case you follow several different development lists), simply bind the macro to a `folder-hook` or to a `message-hook` and use different repository paths per hook. calcurse-4.0.0/doc/edit.txt0000644000175000017500000000177412273003161012474 00000000000000Edit Item ========= Edit the item which is currently selected. Depending on the item type (appointment, event or todo) and item repetition, you will be asked to choose one of the item properties to modify. An item property is one of the following: the start time, the end time, the description, or the item repetition. You can also move an item, that is, move an item without changing its duration. Once you have chosen the property you want to modify, you will be shown its actual value, and you will be able to change it as you like. Notes ----- * If you choose to edit the item repetition properties, you will be asked to re-enter all of the repetition characteristics (repetition type, frequency, and ending date). Moreover, the previous data concerning the deleted occurrences will be lost. * You can enter an empty end time to convert an existing appointment into a punctual appointment. * Do not forget to save the calendar data to retrieve the modified properties next time you launch Calcurse. calcurse-4.0.0/doc/pipe.txt0000644000175000017500000000034112273003161012471 00000000000000Pipe ==== Pipe the selected item to an external program. Press the '|' key to pipe the currently selected appointment or todo entry to an external program. You will be driven back to calcurse as soon as the program exits. calcurse-4.0.0/doc/ru/0000755000175000017500000000000012472330453011513 500000000000000calcurse-4.0.0/doc/ru/import.txt0000644000175000017500000000147212273003161013502 00000000000000Import ====== Import data from an iCal file. You will be asked to enter the file name from which to load iCal items. At the end of the import process, and if the general option 'system_dialogs' is set to 'yes', a report indicating how many items were imported is shown. This report contains the total number of lines read, the number of appointments, events and todo items which were successfully imported, together with the number of items for which problems occurred and that were skipped, if any. If one or more items could not be imported, one has the possibility to read the import process report in order to identify which problems occurred. In this report is shown one item per line, with the line in the input stream at which this item begins, together with the description of why the item could not be imported. calcurse-4.0.0/doc/ru/save.txt0000644000175000017500000000073712273003161013131 00000000000000Save ==== Save calcurse data. Data are split into four different files which contain : / ~/.calcurse/conf -> user configuration | (layout, color, general options) | ~/.calcurse/apts -> data related to the appointments | ~/.calcurse/todo -> data related to the todo list \ ~/.calcurse/keys -> user-defined key bindings In the config menu, you can choose to save the calcurse data automatically before quitting. calcurse-4.0.0/doc/ru/delete.txt0000644000175000017500000000113212273003161013423 00000000000000Delete ====== Delete an element in the todo or appointment list. Depending on which panel is selected when you press the delete key, the highlighted item of either the todo or appointment list will be removed from this list. If the item to be deleted is recurrent, you will be asked if you wish to suppress all of the item occurrences or just the one you selected. If the general option 'confirm_delete' is set to 'YES', then you will be asked for confirmation before deleting the selected event. Do not forget to save the calendar data to retrieve the modifications next time you launch calcurse. calcurse-4.0.0/doc/ru/tab.txt0000644000175000017500000000075012273003161012734 00000000000000Tab === Switch between panels. The panel currently in use has its border colorized. Some actions are possible only if the right panel is selected. For example, if you want to add a task in the todo list, you need first to press the 'TAB' key to get the todo panel selected. Then you can press 'a' to add your item. Notice that at the bottom of the screen the list of possible actions change while pressing 'TAB', so you always know what action can be performed on the selected panel. calcurse-4.0.0/doc/ru/repeat.txt0000644000175000017500000000256312273003161013452 00000000000000Repeat ====== Repeat an event or an appointment. You must first select the item to be repeated by moving inside the appointment panel. Then running the repeat command will lead you to a set of three questions, with which you will be able to specify the repetition characteristics: o type: you can choose between a daily, weekly, monthly or yearly repetition by pressing 'D', 'W', 'M' or 'Y' respectively. o frequency: this indicates how often the item shall be repeated. For example, if you want to remember an anniversary, choose a 'yearly' repetition with a frequency of '1', which means it must be repeated every year. Another example: if you go to the restaurant every two days, choose a 'daily' repetition with a frequency of '2'. o ending date: this specifies when to stop repeating the selected event or appointment. To indicate an endless repetition, enter '0' and the item will be repeated forever. Notes ----- * Repeated items are marked with an '*' inside the appointment panel, to be easily recognizable from non-repeated ones. * The 'Repeat' and 'Delete' command can be mixed to create complicated configurations, as it is possible to delete only one occurrence of a repeated item. calcurse-4.0.0/doc/ru/enote.txt0000644000175000017500000000172612273003161013304 00000000000000EditNote ======== Attach a note to any type of item, or edit an already existing note. This feature is useful if you do not have enough space to store all of your item description, or if you would like to add sub-tasks to an already existing todo item for example. You first need to highlight the item you want the note to be attached to. Then, after pressing the edit note key, you will be driven to an external editor to edit your note. This editor is chosen the following way: * If the 'VISUAL' environment variable is set, then this will be the default editor to be called. * If 'VISUAL' is not set, then the 'EDITOR' environment variable will be used as the default editor. * If none of the above environment variables is set, then '/usr/bin/vi' will be used. Once the item note is edited and saved, quit your favorite editor. You will then go back to calcurse, and the '>' sign will appear in front of the highlighted item, meaning there is a note attached to it. calcurse-4.0.0/doc/ru/goto.txt0000644000175000017500000000070112273003161013132 00000000000000Goto ==== Переход на заданный день в календаре. Using this command, you do not need to travel to that day using the displacement keys inside the calendar panel. If you hit [ENTER] without specifying any date, calcurse checks the system current date and you will be taken to that date. Notice that you can also specify a global key binding to return to the current day, no matter which panel is currently selected. calcurse-4.0.0/doc/ru/intro.txt0000644000175000017500000000125712273003161013324 00000000000000calcurse Online Help ==================== Welcome to the calcurse online help. The online help system allows for easily getting help on specific calcurse features. On the calcurse main screen, type `:help ` (e.g. `:help add`) or `:help ` (e.g. `:help ^A`) to get help on a specific feature or key binding. Type `:help` without any parameter to display this introduction or simply use the corresponding keyboard shortcut (`?` by default). All help texts are displayed using an external pager. You need to exit the pager in order to get back to calcurse (pressing `q` should almost always work). The default pager can be changed by setting the PAGER environment variable. calcurse-4.0.0/doc/ru/vnote.txt0000644000175000017500000000156212273003161013323 00000000000000ViewNote ======== View a note which was previously attached to an item (an item which owns a note has a '>' sign in front of it). Этой командой можно только проÑмотреть запиÑку, а не редактировать её (Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ нужно воÑпользоватьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ 'EditNote'). Once you highlighted an item with a note attached to it, and the view note key was pressed, you will be driven to an external pager to view that note. The default pager is chosen the following way: * If the 'PAGER' environment variable is set, then this will be the default viewer to be called. * ЕÑли Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð½Ðµ задана, то будет иÑпользоватьÑÑ '/usr/bin/less'. As for editing a note, quit the pager and you will be driven back to calcurse. calcurse-4.0.0/doc/ru/other.txt0000644000175000017500000000052712273003161013311 00000000000000OtherCmd ======== Switch between status bar help pages. Because the terminal screen is too narrow to display all of the available commands, this command can be used to see the next set of commands together with their key bindings. Once the last status bar page is reached, running the command another time leads you back to the first page. calcurse-4.0.0/doc/ru/priority.txt0000644000175000017500000000136512273003161014052 00000000000000Priority ======== Change the priority of the currently selected item in the todo list. Priorities are represented by the number appearing in front of the todo description. This number goes from 9 for the lowest priority to 1 for the highest priority. Todo items having higher priorities are placed first (at the top) inside the todo panel. By default, if you want to raise the priority of a todo item, you need to press '+'. In doing so, the number in front of this item will decrease, meaning its priority increases. The item position inside the todo panel may change, depending on the priority of the items above it. At the opposite, to lower a todo priority, press '-'. The todo position may also change depending on the priority of the items below. calcurse-4.0.0/doc/ru/add.txt0000644000175000017500000000437412273003161012724 00000000000000Добавить === Добавление запиÑи в дело или в задачи завиÑит от текущей выбранной панели. Чтобы добавить новую запиÑÑŒ в ÑпиÑок дел, необходимо Ð´Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° войти в опиÑание Ñтой новой запиÑи, где будет предложено уточнить приоритет дела. Приоритет предÑтавлен чиÑлами от 9 - низкий - до 1 - выÑокий. ВпоÑледÑтвии возможно изменить приоритет дела, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ '+' и '-' внутри панели дел. ЕÑли выбрана панель задач, то можно добавить новую задачу или новое Ñобытие на веÑÑŒ день. Ð”Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ð°Ð¶Ð¼Ð¸Ñ‚Ðµ [ENTER] вмеÑто ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ начала и проÑто заполните опиÑание ÑобытиÑ. To enter a new appointment to be added in the appointment list, you will need to enter successively the time at which the appointment begins, the appointment length (either by specifying the end time in [hh:mm] or the duration in [+hh:mm], [+xxdxxhxxm] or [+mm] format), and the description of the event. If you skip the end time by pressing [ENTER], a punctual appointment will be created. День, отображающий Ñобытие или задачу Ñто выбранный день в календаре. Выберите нужный вам день. Заметки ----- * If an appointment lasts for such a long time that it continues on the next days, this event will be indicated on all the corresponding days, and the beginning or ending hour will be replaced by '..' if the event does not begin or end on the day. * ЕÑли вы проÑто нажали [ENTER] в командной Ñтроке опиÑаниÑ, без Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð½Ð¾Ð³Ð¾, то запиÑÑŒ не будет Ñоздана. * Ðе забудьте Ñохранить данные при выходе, чтобы Ñозданные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð±Ñ‹Ð»Ð¸ доÑтупны при Ñледующем запуÑке. calcurse-4.0.0/doc/ru/displacement.txt0000644000175000017500000000151012273003161014631 00000000000000Displacement keys ================= Move around inside calcurse screens. The following scheme summarizes how to get around: move up move to previous week k K UP move left ^ move to previous day | h H LFT <-- + --> l L RGT | move right v move to next day j J DWN move to next week move down Moreover, while inside the calendar panel, the '0' key moves to the first day of the week, and the '$' key selects the last day of the week. calcurse-4.0.0/doc/ru/general.txt0000644000175000017500000000226612273003161013607 00000000000000Generic key bindings ==================== Some of the key bindings apply whatever panel is selected. They are called generic key bindings. Here is the list of all the generic key bindings, together with their corresponding action: '^R' : Redraw function -> redraws calcurse panels, this is useful if you resize your terminal screen or when garbage appears inside the display '^A' : Add Appointment -> add an appointment or an event '^T' : Add TODO -> add a todo 'T' : -1 Day -> move to previous day 't' : +1 Day -> move to next day 'W' : -1 Week -> move to previous week 'w' : +1 Week -> move to next week 'M' : -1 Month -> move to previous month 'm' : +1 Month -> move to next month 'Y' : -1 Year -> move to previous year 'y' : +1 Year -> move to next year '^G' : Goto today -> move to current day The '^P' and '^N' keys are used to scroll text upward or downward when inside specific screens such the help screens for example. They are also used when the calendar screen is selected to switch between the available views (monthly and weekly calendar views). calcurse-4.0.0/doc/ru/copy-paste.txt0000644000175000017500000000074112273003161014252 00000000000000Copy and Paste ============== Copy and paste the currently selected item. This is useful to quickly copy an item from one date to another. To do so, one must first highlight the item that needs to be copied, then press the key assigned to the copy function. Once the new date is chosen in the calendar, the appointment panel must be selected and the paste key must be pressed to paste the item. The item will appear in the appointment panel, assigned to the newly selected date. calcurse-4.0.0/doc/ru/config.txt0000644000175000017500000000132712273003161013434 00000000000000Config ====== Open the configuration submenu. From this submenu, you can select between color, layout, notification and general options, and you can also configure your key bindings. The color submenu lets you choose the color theme. The layout submenu lets you choose the calcurse screen layout, in other words where to place the three different panels on the screen. The general options submenu brings a screen with the different options which modifies the way calcurse interacts with the user. The notify submenu allows you to change the notify-bar settings. The keys submenu lets you define your own key bindings. Do not forget to save the calendar data to retrieve your configuration next time you launch calcurse. calcurse-4.0.0/doc/ru/view.txt0000644000175000017500000000072212273003161013137 00000000000000View ==== View the item you select in either the todo or appointment panel. This is useful when an event description is longer than the available space to display it. If that is the case, the description will be shortened and its end replaced by '...'. To be able to read the entire description, just run the view command and a popup window will appear, containing the whole event. Press any key to close the popup window and go back to the main calcurse screen. calcurse-4.0.0/doc/ru/flag.txt0000644000175000017500000000132312273003161013074 00000000000000Flag Item ========= Toggle an appointment's 'important' flag or a todo's 'completed' flag. If a todo is flagged as completed, its priority number will be replaced by an 'X' sign. Completed tasks will no longer appear in exported data or when using the '-t' command line flag (unless specifying '0' as the priority number, in which case only completed tasks will be shown). If an appointment is flagged as important, an exclamation mark appears in front of it, and you will be warned if time gets closed to the appointment start time. To customize the way one gets notified, the configuration submenu lets you choose the command launched to warn user of an upcoming appointment, and how long before it he gets notified. calcurse-4.0.0/doc/ru/edit.txt0000644000175000017500000000177412273003161013122 00000000000000Edit Item ========= Edit the item which is currently selected. Depending on the item type (appointment, event or todo) and item repetition, you will be asked to choose one of the item properties to modify. An item property is one of the following: the start time, the end time, the description, or the item repetition. You can also move an item, that is, move an item without changing its duration. Once you have chosen the property you want to modify, you will be shown its actual value, and you will be able to change it as you like. Notes ----- * If you choose to edit the item repetition properties, you will be asked to re-enter all of the repetition characteristics (repetition type, frequency, and ending date). Moreover, the previous data concerning the deleted occurrences will be lost. * You can enter an empty end time to convert an existing appointment into a punctual appointment. * Do not forget to save the calendar data to retrieve the modified properties next time you launch Calcurse. calcurse-4.0.0/doc/ru/pipe.txt0000644000175000017500000000034112273003161013117 00000000000000Pipe ==== Pipe the selected item to an external program. Press the '|' key to pipe the currently selected appointment or todo entry to an external program. You will be driven back to calcurse as soon as the program exits. calcurse-4.0.0/doc/ru/credits.txt0000644000175000017500000000133012472326722013632 00000000000000Calcurse - text-based organizer =============================== Copyright (c) 2004-2015 calcurse Development Team All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Send your feedback or comments to : misc@calcurse.org Calcurse home page : http://calcurse.org calcurse-4.0.0/doc/ru/export.txt0000644000175000017500000000103412273003161013503 00000000000000Export ====== Export calcurse data (appointments, events and todos). This leads to the export submenu, from which you can choose between two different export formats: 'ical' and 'pcal'. Choosing one of those formats lets you export calcurse data to iCal or pcal format. You first need to specify the file to which the data will be exported. By default, this file is: ~/calcurse.ics for an ical export, and: ~/calcurse.txt for a pcal export. calcurse data are exported in the following order: events, appointments, todos. calcurse-4.0.0/doc/calcurse.1.txt0000644000175000017500000004535512472326722013526 00000000000000//// /* * Copyright (c) 2004-2015 calcurse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ //// calcurse(1) =========== Name ---- calcurse - text-based organizer Synopsis -------- [verse] 'calcurse' *-Q* [options] [*--from* ] [*--to* |*--days* ] 'calcurse' *-G* [options] 'calcurse' *-i* 'calcurse' *-x* 'calcurse' *--gc* 'calcurse' *--status* 'calcurse' *--version* 'calcurse' *--help* Description ----------- Calcurse is a text-based calendar and scheduling application. It helps keeping track of events, appointments and everyday tasks. A configurable notification system reminds user of upcoming deadlines, and the curses based interface can be customized to suit user needs. All of the commands are documented within an online help system. Options ------- The following options are supported: *-a*, *--appointment*:: Print the appointments and events for the current day and exit. Equivalent to *-Q --filter-type cal*. 'Note:' The calendar from which to read the appointments can be specified using the *-c* flag. *-c* , *--calendar* :: Specify the calendar file to use. The default calendar is *~/.calcurse/apts* (see section 'FILES' below). This option has precedence over *-D*. *-d* , *--day* :: Print the appointments for the given date or for the given number of upcoming days, depending on the argument format. Two possible formats are supported: + -- * a date (possible formats described below). * a number *n*. -- + In the first case, the appointment list for the specified date will be returned, while in the second case the appointment list for the *n* upcoming days will be returned. + As an example, typing *calcurse -d 3* will display your appointments for today, tomorrow, and the day after tomorrow. The first form is equivalent to *-Q --filter-type cal --from *, the second form is equivalent to *-Q --filter-type cal --days *. + 'Note:' as for the *-a* flag, the calendar from which to read the appointments can be specified using the *-c* flag. *--days* :: Specify the length of the range (in days) when used with *-Q*. Cannot be combined with *--to*. *-D* , *--directory* :: Specify the data directory to use. If not specified, the default directory is *~/.calcurse/*. *--filter-type* :: Ignore any items that do not match the type mask. See 'FILTERS' for details. *--filter-pattern* :: Ignore any items with a description that does not match the pattern. See 'FILTERS' for details. *--filter-start-from* :: Ignore any items that start before a given date. See 'FILTERS' for details. *--filter-start-to* :: Ignore any items that start after a given date. See 'FILTERS' for details. *--filter-start-after* :: Only include items that start after a given date. See 'FILTERS' for details. *--filter-start-before* :: Only include items that start before a given date. See 'FILTERS' for details. *--filter-start-range* :: Only include items within a given range. See 'FILTERS' for details. *--filter-end-from* :: Ignore any items that end before a given date. See 'FILTERS' for details. *--filter-end-to* :: Ignore any items that end after a given date. See 'FILTERS' for details. *--filter-end-after* :: Only include items that end after a given date. See 'FILTERS' for details. *--filter-end-before* :: Only include items that end before a given date. See 'FILTERS' for details. *--filter-end-range* :: Only include items within a given range. See 'FILTERS' for details. *--filter-priority* :: Only include items with a given priority. See 'FILTERS' for details. *--filter-completed*:: Only include completed TODO items. See 'FILTERS' for details. *--filter-uncompleted*:: Only include uncompleted TODO items. See 'FILTERS' for details. *--format-apt* :: Specify a format to control the output of appointments in non-interactive mode. See the 'FORMAT STRINGS' section for detailed information on format strings. *--format-recur-apt* :: Specify a format to control the output of recurrent appointments in non-interactive mode. See the 'FORMAT STRINGS' section for detailed information on format strings. *--format-event* :: Specify a format to control the output of events in non-interactive mode. See the 'FORMAT STRINGS' section for detailed information on format strings. *--format-recur-event* :: Specify a format to control the output of recurrent events in non-interactive mode. See the 'FORMAT STRINGS' section for detailed information on format strings. *--format-todo* :: Specify a format to control the output of todo items in non-interactive mode. See the 'FORMAT STRINGS' section for detailed information on format strings. *--from* :: Specify the start date of the range when used with *-Q*. *-g*, *--gc*:: Run the garbage collector for note files and exit. *-G*, *--grep*:: Print appointments and TODO items using the calcurse data file format. The filter interface can be used to further restrict the output. See also: 'FILTERS'. *-h*, *--help*:: Print a short help text describing the supported command-line options, and exit. *-i* , *--import* :: Import the icalendar data contained in 'file'. *-l* , *--limit* :: Limit the number of results printed to 'num'. *-n*, *--next*:: Print the next appointment within upcoming 24 hours and exit. The indicated time is the number of hours and minutes left before this appointment. + 'Note:' the calendar from which to read the appointments can be specified using the *-c* flag. *-Q*, *--query*:: Print all appointments inside a given query range, followed by all TODO items. The query range defaults to the current day and can be changed by using the *--from* and *--to* (or *--days*) parameters. The filter interface can be used to further restrict the output. See also: 'FILTERS'. *-r*[num], *--range*[=num]:: Print events and appointments for the 'num' number of days and exit. If no 'num' is given, a range of 1 day is considered. Equivalent to *-Q --filter-type cal --days *. *--read-only*:: Don't save configuration nor appointments/todos. + 'Warning:' Use this this with care! If you run an interactive calcurse instance in read-only mode, all changes from this session will be lost without warning! *-s*[date], *--startday*[=date]:: Print events and appointments from 'date' and exit. If no 'date' is given, the current day is considered. Equivalent to *-Q --filter-type cal --from *. *-S*, *--search*=:: When used with the *-a*, *-d*, *-r*, *-s*, or *-t* flag, print only the items having a description that matches the given regular expression. Equivalent to *-Q --filter-pattern *. *--status*:: Display the status of running instances of calcurse. If calcurse is running, this will tell if the interactive mode was launched or if calcurse is running in background. The process pid will also be indicated. *-t*[num], *--todo*[=num]:: Print the *todo* list and exit. If the optional number 'num' is given, then only todos having a priority equal to 'num' will be returned. The priority number must be between 1 (highest) and 9 (lowest). It is also possible to specify *0* for the priority, in which case only completed tasks will be shown. Equivalent to *-Q --filter-type todo*, combined with *--filter-priority* and *--filter-completed* or *--filter-uncompleted*. *--to* :: Specify the end date of the range when used with *-Q*. Cannot be combined with *--days*. *-v*, *--version*:: Display *calcurse* version and exit. *-x*[format], *--export*[=format]:: Export user data to specified format. Events, appointments and todos are converted and echoed to stdout. Two possible formats are available: 'ical' and 'pcal'. If the optional argument 'format' is not given, ical format is selected by default. + 'Note:' redirect standard output to export data to a file, by issuing a command such as: + ---- $ calcurse --export > my_data.dat ---- 'Note:' The *-N* option has been removed in calcurse 3.0.0. See the 'FORMAT STRINGS' section on how to print note along with appointments and events. Filters ------- Filters can be used to restrict the set of items which are loaded from the appointments file when using calcurse in non-interactive mode. The following filters are currently supported: *--filter-type* :: Ignore any items that do not match the type mask. The type mask is a comma-separated list of valid type descriptions which include 'event', 'apt', 'recur-event', 'recur-apt' and 'todo'. You can also use 'recur' as a shorthand for 'recur-event,recur-apt' and 'cal' as a shorthand for 'event,apt,recur'. *--filter-pattern* :: Ignore any items with a description that does not match the pattern. The pattern is interpreted as extended regular expression. *--filter-start-from* :: Ignore any items that start before a given date. *--filter-start-to* :: Ignore any items that start after a given date. *--filter-start-after* :: Only include items that start after a given date. *--filter-start-before* :: Only include items that start before a given date. *--filter-start-range* :: Only include items with a start date that falls within a given range. A range consists of a start date and an end date, separated by a comma. *--filter-end-from* :: Ignore any items that end before a given date. *--filter-end-to* :: Ignore any items that end after a given date. *--filter-end-after* :: Only include items that end after a given date. *--filter-end-before* :: Only include items that end before a given date. *--filter-end-range* :: Only include items with an end date that falls within a given range. A range consists of a start date and an end date, separated by a comma. *--filter-priority* :: Only include items with a given priority. *--filter-completed*:: Only include completed TODO items. *--filter-uncompleted*:: Only include uncompleted TODO items. Format strings -------------- Format strings are composed of printf()-style format specifiers -- ordinary characters are copied to stdout without modification. Each specifier is introduced by a *%* and is followed by a character which specifies the field to print. The set of available fields depends on the item type. Format specifiers for appointments ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *s*:: Print the start time of the appointment as UNIX time stamp *S*:: Print the start time of the appointment using the *hh:mm* format *d*:: Print the duration of the appointment in seconds *e*:: Print the end time of the appointment as UNIX time stamp *E*:: Print the end time of the appointment using the *hh:mm* format *m*:: Print the description of the item *n*:: Print the name of the note file belonging to the item *N*:: Print the note belonging to the item Format specifiers for events ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *m*:: Print the description of the item *n*:: Print the name of the note file belonging to the item *N*:: Print the note belonging to the item Format specifiers for todo items ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *p*:: Print the priority of the item *m*:: Print the description of the item *n*:: Print the name of the note file belonging to the item *N*:: Print the note belonging to the item Examples ~~~~~~~~ *`calcurse -r7 --format-apt='- %S -> %E\n\t%m\n%N'`*:: Print appointments and events for the next seven days. Also, print the notes attached to each regular appointment (simulates *-N* for appointments). *`calcurse -r7 --format-apt=' - %m (%S to %E)\n' --format-recur-apt=' - %m (%S to %E)\n'`*:: Print appointments and events for the next seven days and use a custom format for (recurrent) appointments: * - Some appointment (18:30 to 21:30)*. *`calcurse -t --format-todo '(%p) %m\n'`*:: List all todo items and put parentheses around the priority specifiers. Extended format specifiers ~~~~~~~~~~~~~~~~~~~~~~~~~~ Extended format specifiers can be used if you want to specify advanced formatting options. Extended specifiers are introduced by *%(* and are terminated by a closing parenthesis (*)*). The following list includes all short specifiers and corresponding long options: * *s*: *(start)* * *S*: *(start:epoch)* * *e*: *(end)* * *E*: *(end:epoch)* * *d*: *(duration)* * *r*: *(remaining)* * *m*: *(message)* * *n*: *(noteid)* * *N*: *(note)* * *p*: *(priority)* The *(start)* and *(end)* specifiers support strftime()-style extended formatting options that can be used for fine-grained formatting. Additionally, the special formats *epoch* (which is equivalent to *(start:%s)* or *(end:%s)*) and *default* (which is mostly equivalent to *(start:%H:%M)* or *(end:%H:%M)* but displays *..:..* if the item doesn't start/end at the current day) are supported. The *(remaining)* and *(duration)* specifiers support a subset of the strftime()-style formatting options, along with two extra qualifiers. The supported options are *%d*, *%H*, *%M* and *%S*, and by default each of these is zero-padded to two decimal places. To avoid the zero-padding, add *-* in front of the formatting option (for example, *%-d*). Additionally, the *E* option will display the total number of time units until the appointment, rather than showing the remaining number of time units modulo the next larger time unit. For example, an appointment in 50 hours will show as 02:00 with the formatting string *%H:%M*, but will show 50:00 with the formatting string *%EH:%M*. Note that if you are combining the *-* and *E* options, the *-* must come first. The default format for the *(remaining)* specifier is *%EH:%M*. Notes ----- Calcurse interface contains three different panels (calendar, appointment list, and todo list) on which you can perform different actions. All the possible actions, together with their associated keystrokes, are listed on the status bar. This status bar takes place at the bottom of the screen. At any time, the built-in help system can be invoked by pressing the '?' key. Once viewing the help screens, informations on a specific command can be accessed by pressing the keystroke corresponding to that command. Configuration ------------- The calcurse options can be changed from the configuration menu (shown when 'C' is hit). Five possible categories are to be chosen from : the color scheme, the layout (the location of the three panels on the screen), notification options, key bindings configuration menu, and more general options (such as automatic save before quitting). All of these options are detailed in the configuration menu. Files ----- The following structure is created in your $HOME directory (or in the directory you specified with the *-D* option), the first time calcurse is run: ---- $HOME/.calcurse/ |___notes/ |___conf |___keys |___apts |___todo ---- The 'notes' subdirectory contains descriptions of the notes which are attached to appointments, events or todos. One text file is created per note, whose name is the SHA1 message digest of the note itself. The 'conf' file contains the user configuration. The 'keys' file contains the user-defined key bindings. The 'apts' file contains all of the user's appointments and events, and the 'todo' file contains the todo list. 'Note:' if the logging of calcurse daemon activity was set in the notification configuration menu, the extra file 'daemon.log' will appear in calcurse data directory. This file contains logs about calcurse activity when running in background. Environment ----------- This section describes the environment variables that affect how calcurse operates. *VISUAL*:: Specifies the external editor to use for writing notes. *EDITOR*:: If the 'VISUAL' environment variable is not set, then 'EDITOR' will be used as the default external editor. If none of those variables are set, then '/usr/bin/vi' is used instead. *PAGER*:: Specifies the default viewer to be used for reading notes. If this variable is not set, then '/usr/bin/less' is used. Bugs ---- Incorrect highlighting of items appear when using calcurse black and white theme together with a *$TERM* variable set to 'xterm-color'. To fix this bug, and as advised by Thomas E. Dickey (xterm maintainer), 'xterm-xfree86' should be used instead of 'xterm-color' to set the *$TERM* variable: "The xterm-color value for $TERM is a bad choice for XFree86 xterm because it is commonly used for a terminfo entry which happens to not support bce. Use the xterm-xfree86 entry which is distributed with XFree86 xterm (or the similar one distributed with ncurses)." If you find other bugs, please send a report to bugs@calcurse.org or to one of the authors, below. See also -------- vi(1), less(1), ncurses(3), mkstemp(3) The ical specification (rfc2445) can be found at: http://tools.ietf.org/html/rfc2445 The pcal project page: http://pcal.sourceforge.net/ Calcurse home page: http://calcurse.org/ Calcurse complete manual, translated in many languages and maintained in html format, can be found in the doc/ directory of the source package, or at: http://calcurse.org/files/manual.html Authors ------- * *Frederic Culot* * *Lukas Fleischer* Copyright --------- Copyright (c) 2004-2015 calcurse Development Team. This software is released under the BSD License. calcurse-4.0.0/doc/nl/0000755000175000017500000000000012472330453011476 500000000000000calcurse-4.0.0/doc/nl/import.txt0000644000175000017500000000147212273003161013465 00000000000000Import ====== Import data from an iCal file. You will be asked to enter the file name from which to load iCal items. At the end of the import process, and if the general option 'system_dialogs' is set to 'yes', a report indicating how many items were imported is shown. This report contains the total number of lines read, the number of appointments, events and todo items which were successfully imported, together with the number of items for which problems occurred and that were skipped, if any. If one or more items could not be imported, one has the possibility to read the import process report in order to identify which problems occurred. In this report is shown one item per line, with the line in the input stream at which this item begins, together with the description of why the item could not be imported. calcurse-4.0.0/doc/nl/save.txt0000644000175000017500000000073712273003161013114 00000000000000Save ==== Save calcurse data. Data are split into four different files which contain : / ~/.calcurse/conf -> user configuration | (layout, color, general options) | ~/.calcurse/apts -> data related to the appointments | ~/.calcurse/todo -> data related to the todo list \ ~/.calcurse/keys -> user-defined key bindings In the config menu, you can choose to save the calcurse data automatically before quitting. calcurse-4.0.0/doc/nl/delete.txt0000644000175000017500000000113212273003161013406 00000000000000Delete ====== Delete an element in the todo or appointment list. Depending on which panel is selected when you press the delete key, the highlighted item of either the todo or appointment list will be removed from this list. If the item to be deleted is recurrent, you will be asked if you wish to suppress all of the item occurrences or just the one you selected. If the general option 'confirm_delete' is set to 'YES', then you will be asked for confirmation before deleting the selected event. Do not forget to save the calendar data to retrieve the modifications next time you launch calcurse. calcurse-4.0.0/doc/nl/tab.txt0000644000175000017500000000075012273003161012717 00000000000000Tab === Switch between panels. The panel currently in use has its border colorized. Some actions are possible only if the right panel is selected. For example, if you want to add a task in the todo list, you need first to press the 'TAB' key to get the todo panel selected. Then you can press 'a' to add your item. Notice that at the bottom of the screen the list of possible actions change while pressing 'TAB', so you always know what action can be performed on the selected panel. calcurse-4.0.0/doc/nl/repeat.txt0000644000175000017500000000256312273003161013435 00000000000000Repeat ====== Repeat an event or an appointment. You must first select the item to be repeated by moving inside the appointment panel. Then running the repeat command will lead you to a set of three questions, with which you will be able to specify the repetition characteristics: o type: you can choose between a daily, weekly, monthly or yearly repetition by pressing 'D', 'W', 'M' or 'Y' respectively. o frequency: this indicates how often the item shall be repeated. For example, if you want to remember an anniversary, choose a 'yearly' repetition with a frequency of '1', which means it must be repeated every year. Another example: if you go to the restaurant every two days, choose a 'daily' repetition with a frequency of '2'. o ending date: this specifies when to stop repeating the selected event or appointment. To indicate an endless repetition, enter '0' and the item will be repeated forever. Notes ----- * Repeated items are marked with an '*' inside the appointment panel, to be easily recognizable from non-repeated ones. * The 'Repeat' and 'Delete' command can be mixed to create complicated configurations, as it is possible to delete only one occurrence of a repeated item. calcurse-4.0.0/doc/nl/enote.txt0000644000175000017500000000172612273003161013267 00000000000000EditNote ======== Attach a note to any type of item, or edit an already existing note. This feature is useful if you do not have enough space to store all of your item description, or if you would like to add sub-tasks to an already existing todo item for example. You first need to highlight the item you want the note to be attached to. Then, after pressing the edit note key, you will be driven to an external editor to edit your note. This editor is chosen the following way: * If the 'VISUAL' environment variable is set, then this will be the default editor to be called. * If 'VISUAL' is not set, then the 'EDITOR' environment variable will be used as the default editor. * If none of the above environment variables is set, then '/usr/bin/vi' will be used. Once the item note is edited and saved, quit your favorite editor. You will then go back to calcurse, and the '>' sign will appear in front of the highlighted item, meaning there is a note attached to it. calcurse-4.0.0/doc/nl/goto.txt0000644000175000017500000000064412273003161013123 00000000000000Goto ==== Jump to a specific day in the calendar. Using this command, you do not need to travel to that day using the displacement keys inside the calendar panel. If you hit [ENTER] without specifying any date, calcurse checks the system current date and you will be taken to that date. Notice that you can also specify a global key binding to return to the current day, no matter which panel is currently selected. calcurse-4.0.0/doc/nl/intro.txt0000644000175000017500000000125712273003161013307 00000000000000calcurse Online Help ==================== Welcome to the calcurse online help. The online help system allows for easily getting help on specific calcurse features. On the calcurse main screen, type `:help ` (e.g. `:help add`) or `:help ` (e.g. `:help ^A`) to get help on a specific feature or key binding. Type `:help` without any parameter to display this introduction or simply use the corresponding keyboard shortcut (`?` by default). All help texts are displayed using an external pager. You need to exit the pager in order to get back to calcurse (pressing `q` should almost always work). The default pager can be changed by setting the PAGER environment variable. calcurse-4.0.0/doc/nl/vnote.txt0000644000175000017500000000127012273003161013302 00000000000000ViewNote ======== View a note which was previously attached to an item (an item which owns a note has a '>' sign in front of it). This command only permits to view the note, not to edit it (to do so, use the 'EditNote' command). Once you highlighted an item with a note attached to it, and the view note key was pressed, you will be driven to an external pager to view that note. The default pager is chosen the following way: * If the 'PAGER' environment variable is set, then this will be the default viewer to be called. * If the above environment variable is not set, then '/usr/bin/less' will be used. As for editing a note, quit the pager and you will be driven back to calcurse. calcurse-4.0.0/doc/nl/other.txt0000644000175000017500000000052712273003161013274 00000000000000OtherCmd ======== Switch between status bar help pages. Because the terminal screen is too narrow to display all of the available commands, this command can be used to see the next set of commands together with their key bindings. Once the last status bar page is reached, running the command another time leads you back to the first page. calcurse-4.0.0/doc/nl/priority.txt0000644000175000017500000000136512273003161014035 00000000000000Priority ======== Change the priority of the currently selected item in the todo list. Priorities are represented by the number appearing in front of the todo description. This number goes from 9 for the lowest priority to 1 for the highest priority. Todo items having higher priorities are placed first (at the top) inside the todo panel. By default, if you want to raise the priority of a todo item, you need to press '+'. In doing so, the number in front of this item will decrease, meaning its priority increases. The item position inside the todo panel may change, depending on the priority of the items above it. At the opposite, to lower a todo priority, press '-'. The todo position may also change depending on the priority of the items below. calcurse-4.0.0/doc/nl/add.txt0000644000175000017500000000326012273003161012700 00000000000000Add === Add an item in either the todo or appointment list, depending on which panel is selected. To enter a new item in the todo list, you will need first to enter the description of this new item. Then you will be asked to specify the todo priority. This priority is represented by a number going from 9 for the lowest priority, to 1 for the highest one. It is still possible to change the item priority afterwards, by using the '+' and '-' keys inside the todo panel. If the appointment panel is selected, you will be able to enter either a new appointment or a new all-day long event. To enter a new event, press [ENTER] instead of the item start time, and just fill in the event description. To enter a new appointment to be added in the appointment list, you will need to enter successively the time at which the appointment begins, the appointment length (either by specifying the end time in [hh:mm] or the duration in [+hh:mm], [+xxdxxhxxm] or [+mm] format), and the description of the event. If you skip the end time by pressing [ENTER], a punctual appointment will be created. The day at which occurs the event or appointment is the day currently selected in the calendar, so you need to move to the desired day before. Notes ----- * If an appointment lasts for such a long time that it continues on the next days, this event will be indicated on all the corresponding days, and the beginning or ending hour will be replaced by '..' if the event does not begin or end on the day. * If you only press [ENTER] at the description prompt, without any description, no item will be added. * Do not forget to save the calendar data to retrieve the new event next time you launch calcurse. calcurse-4.0.0/doc/nl/displacement.txt0000644000175000017500000000151012273003161014614 00000000000000Displacement keys ================= Move around inside calcurse screens. The following scheme summarizes how to get around: move up move to previous week k K UP move left ^ move to previous day | h H LFT <-- + --> l L RGT | move right v move to next day j J DWN move to next week move down Moreover, while inside the calendar panel, the '0' key moves to the first day of the week, and the '$' key selects the last day of the week. calcurse-4.0.0/doc/nl/general.txt0000644000175000017500000000226612273003161013572 00000000000000Generic key bindings ==================== Some of the key bindings apply whatever panel is selected. They are called generic key bindings. Here is the list of all the generic key bindings, together with their corresponding action: '^R' : Redraw function -> redraws calcurse panels, this is useful if you resize your terminal screen or when garbage appears inside the display '^A' : Add Appointment -> add an appointment or an event '^T' : Add TODO -> add a todo 'T' : -1 Day -> move to previous day 't' : +1 Day -> move to next day 'W' : -1 Week -> move to previous week 'w' : +1 Week -> move to next week 'M' : -1 Month -> move to previous month 'm' : +1 Month -> move to next month 'Y' : -1 Year -> move to previous year 'y' : +1 Year -> move to next year '^G' : Goto today -> move to current day The '^P' and '^N' keys are used to scroll text upward or downward when inside specific screens such the help screens for example. They are also used when the calendar screen is selected to switch between the available views (monthly and weekly calendar views). calcurse-4.0.0/doc/nl/copy-paste.txt0000644000175000017500000000074112273003161014235 00000000000000Copy and Paste ============== Copy and paste the currently selected item. This is useful to quickly copy an item from one date to another. To do so, one must first highlight the item that needs to be copied, then press the key assigned to the copy function. Once the new date is chosen in the calendar, the appointment panel must be selected and the paste key must be pressed to paste the item. The item will appear in the appointment panel, assigned to the newly selected date. calcurse-4.0.0/doc/nl/config.txt0000644000175000017500000000132712273003161013417 00000000000000Config ====== Open the configuration submenu. From this submenu, you can select between color, layout, notification and general options, and you can also configure your key bindings. The color submenu lets you choose the color theme. The layout submenu lets you choose the calcurse screen layout, in other words where to place the three different panels on the screen. The general options submenu brings a screen with the different options which modifies the way calcurse interacts with the user. The notify submenu allows you to change the notify-bar settings. The keys submenu lets you define your own key bindings. Do not forget to save the calendar data to retrieve your configuration next time you launch calcurse. calcurse-4.0.0/doc/nl/view.txt0000644000175000017500000000072212273003161013122 00000000000000View ==== View the item you select in either the todo or appointment panel. This is useful when an event description is longer than the available space to display it. If that is the case, the description will be shortened and its end replaced by '...'. To be able to read the entire description, just run the view command and a popup window will appear, containing the whole event. Press any key to close the popup window and go back to the main calcurse screen. calcurse-4.0.0/doc/nl/flag.txt0000644000175000017500000000132312273003161013057 00000000000000Flag Item ========= Toggle an appointment's 'important' flag or a todo's 'completed' flag. If a todo is flagged as completed, its priority number will be replaced by an 'X' sign. Completed tasks will no longer appear in exported data or when using the '-t' command line flag (unless specifying '0' as the priority number, in which case only completed tasks will be shown). If an appointment is flagged as important, an exclamation mark appears in front of it, and you will be warned if time gets closed to the appointment start time. To customize the way one gets notified, the configuration submenu lets you choose the command launched to warn user of an upcoming appointment, and how long before it he gets notified. calcurse-4.0.0/doc/nl/edit.txt0000644000175000017500000000177412273003161013105 00000000000000Edit Item ========= Edit the item which is currently selected. Depending on the item type (appointment, event or todo) and item repetition, you will be asked to choose one of the item properties to modify. An item property is one of the following: the start time, the end time, the description, or the item repetition. You can also move an item, that is, move an item without changing its duration. Once you have chosen the property you want to modify, you will be shown its actual value, and you will be able to change it as you like. Notes ----- * If you choose to edit the item repetition properties, you will be asked to re-enter all of the repetition characteristics (repetition type, frequency, and ending date). Moreover, the previous data concerning the deleted occurrences will be lost. * You can enter an empty end time to convert an existing appointment into a punctual appointment. * Do not forget to save the calendar data to retrieve the modified properties next time you launch Calcurse. calcurse-4.0.0/doc/nl/pipe.txt0000644000175000017500000000034112273003161013102 00000000000000Pipe ==== Pipe the selected item to an external program. Press the '|' key to pipe the currently selected appointment or todo entry to an external program. You will be driven back to calcurse as soon as the program exits. calcurse-4.0.0/doc/nl/credits.txt0000644000175000017500000000133012472326722013615 00000000000000Calcurse - text-based organizer =============================== Copyright (c) 2004-2015 calcurse Development Team All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Send your feedback or comments to : misc@calcurse.org Calcurse home page : http://calcurse.org calcurse-4.0.0/doc/nl/export.txt0000644000175000017500000000103412273003161013466 00000000000000Export ====== Export calcurse data (appointments, events and todos). This leads to the export submenu, from which you can choose between two different export formats: 'ical' and 'pcal'. Choosing one of those formats lets you export calcurse data to iCal or pcal format. You first need to specify the file to which the data will be exported. By default, this file is: ~/calcurse.ics for an ical export, and: ~/calcurse.txt for a pcal export. calcurse data are exported in the following order: events, appointments, todos. calcurse-4.0.0/doc/credits.txt0000644000175000017500000000133012472326722013204 00000000000000Calcurse - text-based organizer =============================== Copyright (c) 2004-2015 calcurse Development Team All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Send your feedback or comments to : misc@calcurse.org Calcurse home page : http://calcurse.org calcurse-4.0.0/doc/manual.html0000644000175000017500000030302512472330440013147 00000000000000 CALCURSE - text-based organizer

1. Abstract

This manual describes calcurse functionalities, and how to use them. The installation from source is first described, together with the available command line arguments. The user interface is then presented, with all of the customizable options that change calcurse behavior. Last, bug reporting procedure is explained, as well as the way one can contribute to calcurse development.

2. Introduction

calcurse is a text-based calendar and scheduling application. It helps keeping track of events, appointments and everyday tasks. A configurable notification system reminds user of upcoming deadlines, and the curses based interface can be customized to suit user needs. All of the commands are documented within an online help system.

3. Overview

3.1. Creation history

Frederic started thinking about this project when he was finishing his Ph.D. in Astrophysics as it started to be a little hard to organize himself and he really needed a good tool for managing his appointments and todo list. Unfortunately, he finished his Ph.D. before finishing calcurse but he continued working on it, hoping it would be helpful to other people.

In mid-2010, Lukas took over development of calcurse and is now the main contributor and reviewer of patches.

But why calcurse anyway? Well, it is simply the concatenation of *cal*endar and *curse*s, the name of the library used to build the user interface.

3.2. Important features

Calcurse is multi-platform and intended to be lightweight, fast and reliable. It is to be used inside a console or terminal, locally or on a distant machine within an ssh (or similar) connection.

Calcurse can be run in two different modes : interactive or non-interactive mode. The first mode allows oneself to view its own personal organizer almost everywhere, thanks to the text-based interface. The second mode permits to easily build reminders just by adding calcurse with appropriate command line arguments inside a cron tab or within a shell init script.

Moreover, calcurse was created with the end-user in mind, and tends to be as friendly as possible. This means a complete on-line help system, together with having all of the possible actions displayed at any time inside a status bar. The user interface is configurable, and one can choose between several color and layout combinations. Key bindings are also configurable, to fit everyone’s needs. Last, a configurable notification system reminds user of upcoming appointments. The reminders are sent even if the user’s interface is not running, as calcurse is able to run in background.

4. Installation

4.1. Requirements

4.1.1. ncurses library

Calcurse requires only a C compiler, such as cc or gcc, and the ncurses library. It would be very surprising not to have a valid ncurses library already installed on your computer, but if not, you can find it at the following url: http://ftp.gnu.org/pub/gnu/ncurses/

Note It is also possible to link calcurse against the ncursesw library (ncurses with support for unicode).

4.1.2. gettext library

calcurse supports internationalization (i18n hereafter) through the gettext utilities. This means calcurse can produce multi-lingual messages if compiled with native language support (i.e. NLS).

However, NLS is optionnal and if you do not want to have support for multi-lingual messages, you can disable this feature. This is done by giving the --disable-nls option to configure (see section Install process). To check if the gettext utilities are installed on your system, you can search for the libintl.h header file for instance:

$ locate libintl.h

If this header file is not found, then you can obtain the gettext sources at the following url : http://ftp.gnu.org/pub/gnu/gettext/

Note Even if libintl.h is found on your system, it can be wise to specify its location during the install process, by using the --with-libintl-prefix option with configure. Indeed, the configure could fail to locate this library if installed in an uncommon place.

4.2. Install process

First you need to gunzip and untar the source archive:

$ tar zxvf calcurse-4.0.0.tar.gz

Once you meet the requirements and have extracted the archive, the install process is quite simple, and follows the standard three steps process:

$ ./configure
$ make
$ make install    # (may require root privilege)

Use ./configure --help to obtain a list of possible options.

5. calcurse basics

5.1. Invocation

5.1.1. Command line arguments

calcurse takes the following options from the command line (both short and long options are supported):

-a, --appointment

Print the appointments and events for the current day and exit. Equivalent to -Q --filter-type cal. The calendar from which to read the appointments can be specified using the -c flag.

-c <file>, --calendar <file>

Specify the calendar file to use. The default calendar is ~/.calcurse/apts (see section calcurse files). This option has precedence over -D.

-d <date|num>, --day <date|num>

Print the appointments for the given date or for the given number of upcoming days, depending on the argument format. Two possible formats are supported:

  • a date (possible formats described below).

  • a number n.

In the first case, the appointment list for the specified date will be returned, while in the second case the appointment list for the n upcoming days will be returned. As an example, typing calcurse -d 3 will display your appointments for today, tomorrow, and the day after tomorrow. The first form is equivalent to -Q --filter-type cal --from <date>, the second form is equivalent to -Q --filter-type cal --days <num>.

Note: as for the -a flag, the calendar from which to read the appointments can be specified using the -c flag.

--days <num>

Specify the length of the range (in days) when used with -Q. Cannot be combined with --to.

-D <dir>, --directory <dir>

Specify the data directory to use. If not specified, the default directory is ~/.calcurse/.

--filter-type <type>

Ignore any items that do not match the type mask. See Filters for details.

--filter-pattern <pattern>

Ignore any items with a description that does not match the pattern. See Filters for details.

--filter-start-from <date>

Ignore any items that start before a given date. See Filters for details.

--filter-start-to <date>

Ignore any items that start after a given date. See Filters for details.

--filter-start-after <date>

Only include items that start after a given date. See Filters for details.

--filter-start-before <date>

Only include items that start before a given date. See Filters for details.

--filter-start-range <range>

Only include items within a given range. See Filters for details.

--filter-end-from <date>

Ignore any items that end before a given date. See Filters for details.

--filter-end-to <date>

Ignore any items that end after a given date. See Filters for details.

--filter-end-after <date>

Only include items that end after a given date. See Filters for details.

--filter-end-before <date>

Only include items that end before a given date. See Filters for details.

--filter-end-range <range>

Only include items within a given range. See Filters for details.

--filter-priority <priority>

Only include items with a given priority. See Filters for details.

--filter-completed

Only include completed TODO items. See Filters for details.

--filter-uncompleted

Only include uncompleted TODO items. See Filters for details.

--format-apt <format>

Specify a format to control the output of appointments in non-interactive mode. See the Format strings section for detailed information on format strings.

--format-recur-apt <format>

Specify a format to control the output of recurrent appointments in non-interactive mode. See the Format strings section for detailed information on format strings.

--format-event <format>

Specify a format to control the output of events in non-interactive mode. See the Format strings section for detailed information on format strings.

--format-recur-event <format>

Specify a format to control the output of recurrent events in non-interactive mode. See the Format strings section for detailed information on format strings.

--format-todo <format>

Specify a format to control the output of todo items in non-interactive mode. See the Format strings section for detailed information on format strings.

--from <date>

Specify the start date of the range when used with -Q.

-g, --gc

Run the garbage collector for note files and exit.

-G, --grep

Print appointments and TODO items using the calcurse data file format. The filter interface can be used to further restrict the output. See also: Filters.

-h, --help

Print a short help text describing the supported command-line options, and exit.

-i <file>, --import <file>

Import the icalendar data contained in file.

-l <num>, --limit <num>

Limit the number of results printed to num.

-n, --next

Print the next appointment within upcoming 24 hours and exit. The indicated time is the number of hours and minutes left before this appointment.

Note: the calendar from which to read the appointments can be specified using the -c flag.

-Q, --query

Print all appointments inside a given query range, followed by all TODO items. The query range defaults to the current day and can be changed by using the --from and --to (or --days) parameters. The filter interface can be used to further restrict the output. See also: Filters.

-r[num], --range[=num]

Print events and appointments for the num number of days and exit. If no num is given, a range of 1 day is considered. Equivalent to -Q --filter-type cal --days <num>.

--read-only

Don’t save configuration nor appointments/todos.

Warning Use this this with care! If you run an interactive calcurse instance in read-only mode, all changes from this session will be lost without warning!
-s[date], --startday[=date]

Print events and appointments from date and exit. If no date is given, the current day is considered. Equivalent to -Q --filter-type cal --from <date>.

-S<regex>, --search=<regex>

When used with the -a, -d, -r, -s, or -t flag, print only the items having a description that matches the given regular expression. Equivalent to -Q --filter-pattern <regex>.

--status

Display the status of running instances of calcurse. If calcurse is running, this will tell if the interactive mode was launched or if calcurse is running in background. The process pid will also be indicated.

-t[num], --todo[=num]

Print the todo list and exit. If the optional number num is given, then only todos having a priority equal to num will be returned. The priority number must be between 1 (highest) and 9 (lowest). It is also possible to specify 0 for the priority, in which case only completed tasks will be shown. Equivalent to -Q --filter-type todo, combined with --filter-priority and --filter-completed or --filter-uncompleted.

--to <date>

Specify the end date of the range when used with -Q. Cannot be combined with --days.

-v, --version

Display calcurse version and exit.

-x[format], --export[=format]

Export user data to specified format. Events, appointments and todos are converted and echoed to stdout. Two possible formats are available: ical and pcal (see section Links below). If the optional argument format is not given, ical format is selected by default.

Note: redirect standard output to export data to a file, by issuing a command such as:

$ calcurse --export > my_data.dat
Note The -N option has been removed in calcurse 3.0.0. See the Format strings section on how to print note along with appointments and events.

5.1.2. Filters

Filters can be used to restrict the set of items which are loaded from the appointments file when using calcurse in non-interactive mode. The following filters are currently supported:

--filter-type <type>

Ignore any items that do not match the type mask. The type mask is a comma-separated list of valid type descriptions which include event, apt, recur-event, recur-apt and todo. You can also use recur as a shorthand for recur-event,recur-apt and cal as a shorthand for event,apt,recur.

--filter-pattern <pattern>

Ignore any items with a description that does not match the pattern. The pattern is interpreted as extended regular expression.

--filter-start-from <date>

Ignore any items that start before a given date.

--filter-start-to <date>

Ignore any items that start after a given date.

--filter-start-after <date>

Only include items that start after a given date.

--filter-start-before <date>

Only include items that start before a given date.

--filter-start-range <range>

Only include items with a start date that falls within a given range. A range consists of a start date and an end date, separated by a comma.

--filter-end-from <date>

Ignore any items that end before a given date.

--filter-end-to <date>

Ignore any items that end after a given date.

--filter-end-after <date>

Only include items that end after a given date.

--filter-end-before <date>

Only include items that end before a given date.

--filter-end-range <range>

Only include items with an end date that falls within a given range. A range consists of a start date and an end date, separated by a comma.

--filter-priority <priority>

Only include items with a given priority.

--filter-completed

Only include completed TODO items.

--filter-uncompleted

Only include uncompleted TODO items.

5.1.3. Format strings

Format strings are composed of printf()-style format specifiers — ordinary characters are copied to stdout without modification. Each specifier is introduced by a % and is followed by a character which specifies the field to print. The set of available fields depends on the item type.

Format specifiers for appointments
s

Print the start time of the appointment as UNIX time stamp

S

Print the start time of the appointment using the hh:mm format

d

Print the duration of the appointment in seconds

e

Print the end time of the appointment as UNIX time stamp

E

Print the end time of the appointment using the hh:mm format

m

Print the description of the item

n

Print the name of the note file belonging to the item

N

Print the note belonging to the item

Format specifiers for events
m

Print the description of the item

n

Print the name of the note file belonging to the item

N

Print the note belonging to the item

Format specifiers for todo items
p

Print the priority of the item

m

Print the description of the item

n

Print the name of the note file belonging to the item

N

Print the note belonging to the item

Examples
calcurse -r7 --format-apt='- %S -> %E\n\t%m\n%N'

Print appointments and events for the next seven days. Also, print the notes attached to each regular appointment (simulates -N for appointments).

calcurse -r7 --format-apt=' - %m (%S to %E)\n' --format-recur-apt=' - %m (%S to %E)\n'

Print appointments and events for the next seven days and use a custom format for (recurrent) appointments: ` - Some appointment (18:30 to 21:30)`.

calcurse -t --format-todo '(%p) %m\n'

List all todo items and put parentheses around the priority specifiers.

Extended format specifiers

Extended format specifiers can be used if you want to specify advanced formatting options. Extended specifiers are introduced by %( and are terminated by a closing parenthesis ()). The following list includes all short specifiers and corresponding long options:

  • s: (start)

  • S: (start:epoch)

  • e: (end)

  • E: (end:epoch)

  • d: (duration)

  • r: (remaining)

  • m: (message)

  • n: (noteid)

  • N: (note)

  • p: (priority)

The (start) and (end) specifiers support strftime()-style extended formatting options that can be used for fine-grained formatting. Additionally, the special formats epoch (which is equivalent to (start:%s) or (end:%s)) and default (which is mostly equivalent to (start:%H:%M) or (end:%H:%M) but displays ..:.. if the item doesn’t start/end at the current day) are supported.

The (remaining) and (duration) specifiers support a subset of the strftime()-style formatting options, along with two extra qualifiers. The supported options are %d, %H, %M and %S, and by default each of these is zero-padded to two decimal places. To avoid the zero-padding, add - before the formatting option (for example, %-d). Additionally, the E option will display the total number of time units until the appointment, rather than showing the remaining number of time units modulo the next larger time unit. For example, an appointment in 50 hours will show as 02:00 with the formatting string %H:%M, but will show 50:00 with the formatting string %EH:%M. Note that if you are combining the - and E options, the - must come first. The default format for the (remaining) specifier is %EH:%M.

5.1.4. Environment variable for i18n

calcurse can be compiled with native language support (see gettext library). Thus, if you wish to have messages displayed into your native language, first make sure it is available by looking at the po/LINGUAS file. This file indicates the set of available languages by showing the two-letters corresponding code (for exemple, fr stands for french). If you do not find your language, it would be greatly appreciated if you could help translating calcurse (see the How to contribute? section).

If your language is available, run calcurse with the following command:

$ LC_ALL=fr_FR calcurse
  1. where fr_FR is the locale name in this exemple, but should be replaced by the locale corresponding to the desired language.

You should also specify the charset to be used, because in some cases the accents and such are not displayed correctly. This charset is indicated at the beginning of the po file corresponding to the desired language. For instance, you can see in the fr.po file that it uses the iso-8859-1 charset, so you could run calcurse using the following command:

$ LC_ALL=fr_FR.ISO8859-1 calcurse

5.1.5. Other environment variables

The following environment variables affect the way calcurse operates:

VISUAL

Specifies the external editor to use for writing notes.

EDITOR

If the VISUAL environment variable is not set, then EDITOR will be used as the default external editor. If none of those variables are set, then /usr/bin/vi is used instead.

PAGER

Specifies the default viewer to be used for reading notes. If this variable is not set, then /usr/bin/less is used.

5.2. User interface

5.2.1. Non-interactive mode

When called with at least one of the following arguments: -a, -d, -h, -n, -t, -v, -x, calcurse is started in non-interactive mode. This means the desired information will be displayed, and after that, calcurse simply quits and you are driven back to the shell prompt.

That way, one can add a line such as calcurse --todo --appointment in its init config file to display at logon the list of tasks and appointments scheduled for the current day.

5.2.2. Interactive mode

Note Key bindings that are indicated in this manual correspond to the default ones, defined when calcurse is launched for the first time. If those key bindings do not suit user’s needs, it is possible to change them within the keys configuration menu (see key bindings).

When called without any argument or only with the -c option, calcurse is started in interactive mode. In this mode, you are shown an interface containing three different panels which you can browse using the TAB key, plus a notification bar and a status bar (see figure below).

 appointment panel---.                                   .---calendar panel
                     |                                   |
                     v                                   v
 +------------------------------------++----------------------------+
 |          Appointments              ||          Calendar          |
 |------------------------------------||----------------------------|
 |                 (|)  April 6, 2006 ||         April 2006         |
 |                                    ||Mon Tue Wed Thu Fri Sat Sun |
 |                                    ||                      1   2 |
 |                                    ||  3   4   5   6   7   8   9 |
 |                                    || 10  11  12  13  14  15  16 |
 |                                    || 17  18  19  20  21  22  23 |
 |                                    || 24  25  26  27  28  29  30 |
 |                                    ||                            |
 |                                    |+----------------------------+
 |                                    |+----------------------------+
 |                                    ||            ToDo            | todo
 |                                    ||----------------------------| panel
 |                                    ||                            |   |
 |                                    ||                            |   |
 |                                    ||                            |<--.
 |                                    ||                            |
 +------------------------------------++----------------------------+
 |---[ Mon 2006-11-22 | 10:11:43 ]---(apts)----> 01:20 :: lunch <---|<--.
 +------------------------------------------------------------------+ notify-bar
 | ? Help     R Redraw    H/L -/+1 Day      G GoTo       C Config   |
 | Q Quit     S Save      J/K -/+1 Week   Tab Chg View              |<-.
 +------------------------------------------------------------------+  |
                                                                       |
                                                                 status bar

The first panel represents a calendar which allows to highlight a particular day, the second one contains the list of the events and appointments on that day, and the last one contains a list of tasks to do but which are not assigned to any specific day.

Depending on the selected view, the calendar could either display a monthly (default as shown in previous figure) or weekly view. The weekly view would look like the following:

+------------------------------------+
|              Calendar              |
|----------------------------(# 13)--|
|    Mon Tue Wed Thu Fri Sat Sun     |
|     29  30  31  01  02  03  04     |
|                               <----+--  slice 1: 00:00 to 04:00 AM
|       --  --  --  --  --  --       |
|                               <----+--  slice 2: 04:00 to 08:00 AM
|       --  --  --  --  --  --       |
|                               <----+--  slice 3: 08:00 to 12:00 AM
|    -  --  --  --  --  --  --  -  <-+--  midday
|                               <----+--  slice 4: 12:00 to 04:00 PM
|       --  --  --  --  --  --       |
|                               <----+--  slice 5: 04:00 to 08:00 PM
|       --  --  --  --  --  --       |
|                               <----+--  slice 6: 08:00 to 12:00 PM
+------------------------------------+

The current week number is displayed on the top-right side of the panel (# 13 meaning it is the 13th week of the year in the above example). The seven days of the current week are displayed in column. Each day is divided into slices of 4 hours each (6 slices in total, see figure above). A slice will appear in a different color if an appointment falls into the corresponding time-slot.

In the appointment panel, one can notice the (|) sign just in front of the date. This indicates the current phase of the moon. Depending on which is the current phase, the following signs can be seen:

` |) `

first quarter

` (|) `

full moon

` (| `

last quarter

` | `

new moon

no sign

Phase of the moon does not correspond to any of the above ones.

At the very bottom of the screen there is a status bar, which indicates the possible actions and the corresponding keystrokes.

Just above this status bar is the notify-bar, which indicates from left to right : the current date, the current time, the calendar file currently in use (apts on the above example, which is the default calendar file, see the following section), and the next appointment within the upcoming 24 hours. Here it says that it will be lunch time in one hour and twenty minutes.

Note Some actions, such as editing or adding an item, require to type in some text. This is done with the help of the built-in input line editor.

Within this editor, if a line is longer than the screen width, a >, *, or < character is displayed in the last column indicating that there are more character after, before and after, or before the current position, respectively. The line is scrolled horizontally as necessary.

Moreover, some editing commands are bound to particular control characters. Hereafter are indicated the available editing commands (^ stands for the control key):

^a

moves the cursor to the beginning of the input line

^b

moves the cursor backward

^d

deletes one character forward

^e

moves the cursor to the end of the input line

^f

moves the cursor forward

^h

deletes one character backward

^k

deletes the input from the cursor to the end of the line

^w

deletes backward to the beginning of the current word

ESCAPE

cancels the editing

5.3. Background mode

When the daemon mode is enabled in the notification configuration menu (see Notify-bar settings), calcurse will stay in background when the user interface is not running. In background mode, calcurse checks for upcoming appointments and runs the user-defined notification command when necessary. When the user interface is started again, the daemon automatically stops.

‘calcurse` background activity can be logged (set the daemon.log variable in the notification configuration menu), and in that case, information about the daemon start and stop time, reminders’ command launch time, signals received… will be written in the daemon.log file (see section files).

Using the --status command line option (see section Command line arguments), one can know if calcurse is currently running in background or not. If the daemon is running, a message like the following one will be displayed (the pid of the daemon process will be shown):

calcurse is running in background (pid 14536)
Note To stop the daemon, just send the TERM signal to it, using a command such as: kill daemon_pid, where daemon_pid is the process id of the daemon (14536 in the above example).

5.4. calcurse files

The following structure is created in your $HOME directory (or in the directory you specified with the -D option) the first time calcurse is run :

$HOME/.calcurse/
           |___notes/
           |___conf
           |___keys
           |___apts
           |___todo
notes/

this subdirectory contains descriptions of the notes which are attached to appointments, events or todos. Since the file name of each note file is a SHA1 hash of the note itself, multiple items can share the same note file. calcurse provides a garbage collector (see the -g command line parameter) that can be used to remove note files which are no longer linked to any item.

conf

this file contains the user configuration

keys

this file contains the user-defined key bindings

apts

this file contains all of the events and user’s appointments

todo

this file contains the todo list

Note If the logging of calcurse daemon activity was set in the notification configuration menu, the extra file daemon.log will appear in calcurse data directory. This file contains logs about calcurse activity when running in background.

5.5. Import/Export capabilities

The import and export capabilities offered by calcurse are described below.

5.5.1. Import

Data in icalendar format as described in the rfc2445 specification (see links section below) can be imported into calcurse. Calcurse ical parser is based on version 2.0 of this specification, but for now on, only a subset of it is supported.

The following icalendar properties are handled by calcurse:

  • VTODO items: "PRIORITY", "VALARM", "SUMMARY", "DESCRIPTION"

  • VEVENT items: "DTSTART", "DTEND", "DURATION", "RRULE", "EXDATE", "VALARM", "SUMMARY", "DESCRIPTION"

The icalendar DESCRIPTION property will be converted into calcurse format by adding a note to the item. If a "VALARM" property is found, the item will be flagged as important and the user will get a notification (this is only applicable to appointments).

Here are the properties that are not implemented:

  • negative time durations are not taken into account (item is skipped)

  • some recurence frequences are not recognize: "SECONDLY" / "MINUTELY" / "HOURLY"

  • some recurrence keywords are not recognized (all those starting with BY): "BYSECOND" / "BYMINUTE" / "BYHOUR" / "BYDAY" / "BYMONTHDAY" / "BYYEARDAY" / "BYWEEKNO" / "BYMONTH" / "BYSETPOS" plus "WKST"

  • the recurrence exception keyword "EXRULE" is not recognized

  • timezones are not taken into account

5.5.2. Export

Two possible export formats are available: ical and pcal (see section Links below to find out about those formats).

5.6. Online help

At any time, the built-in help system can be invoked by pressing the ? key. By default, it shows an introduction to the help system in an external pager. You need to exit the pager in order to get back to calcurse (pressing q should almost always work). The default pager can be changed by setting the PAGER environment variable.

If you want to display help on a specific feature or key binding, type :help <feature> (e.g. :help add) or :help <key> (e.g. :help ^A) on the main screen.

6. Options

All of the calcurse parameters are configurable from the Configuration menu available when pressing C. You are then driven to a submenu with five possible choices : pressing C again will lead you to the Color scheme configuration, pressing L allows you to choose the layout of the main calcurse screen (in other words, where to put the three different panels on screen), pressing G permits you to choose between different general options, pressing K opens the key bindings configuration menu, and last you can modify the notify-bar settings by pressing N.

6.1. General options

These options control calcurse general behavior, as described below:

appearance.compactpanels (default: no)

In compact panels mode, all captions are removed from panels.

appearance.defaultpanel (default: calendar)

This can be used to specify the panel to be selected on startup.

general.autosave (default: yes)

This option allows to automatically save the user’s data (if set to yes) when quitting. <p class="rq"><span class="valorise">warning:</span> No data will be automatically saved if general.autosave is set to no. This means the user must press S (for saving) in order to retrieve its modifications.

general.autogc (default: no)

Automatically run the garbage collector for note files when quitting.

general.periodicsave (default: 0)

If different from 0, user’s data will be automatically saved every general.periodicsave minutes. When an automatic save is performed, two asterisks (i.e. **) will appear on the top right-hand side of the screen).

general.confirmquit (default: yes)

If set to yes, confirmation is required before quitting, otherwise pressing Q will cause calcurse to quit without prompting for user confirmation.

general.confirmdelete (default: yes)

If this option is set to yes, pressing D for deleting an item (either a todo, appointment, or event), will lead to a prompt asking for user confirmation before removing the selected item from the list. Otherwise, no confirmation will be needed before deleting the item.

general.systemdialogs (default: yes)

Setting this option to no will result in skipping the system dialogs related to the saving and loading of data. This can be useful to speed up the input/output processes.

general.progressbar (default: yes)

If set to no, this will cause the disappearing of the progress bar which is usually shown when saving data to file. If set to yes, this bar will be displayed, together with the name of the file being saved (see section calcurse files).

appearance.calendarview (default: 0)

If set to 0, the monthly calendar view will be displayed by default otherwise it is the weekly view that will be displayed.

general.firstdayofweek (default: monday)

One can choose between Monday and Sunday as the first day of the week. If general.firstdayofweek is set to monday, Monday will be first in the calendar view. Otherwise, Sunday will be the first day of the week.

format.outputdate (default: %D)

This option indicates the format to be used when displaying dates in non-interactive mode. Using the default values, dates are displayed the following way: mm/dd/aa. You can see all of the possible formats by typing man 3 strftime inside a terminal.

format.inputdate (default: 1)

This option indicates the format that will be used to enter dates in interactive mode. Four choices are available:

  1. mm/dd/yyyy

  2. dd/mm/yyyy

  3. yyyy/mm/dd

  4. yyyy-mm-dd

6.2. Key bindings

One can define ones own key bindings within the Keys configuration menu. The default keys look like the one used by the vim editor, especially the displacement keys. Anyway, within this configuration menu, users can redefine all of the keys available from within calcurse’s user interface.

To define new key bindings, first highlight the action to which it will apply. Then, delete the actual key binding if necessary, and add a new one. You will then be asked to press the key corresponding to the new binding. It is possible to define more than one key binding for a single action.

An automatic check is performed to see if the new key binding is not already set for another action. In that case, you will be asked to choose a different one. Another check is done when exiting from this menu, to make sure all possible actions have a key associated with it.

The following keys can be used to define bindings:

  • lower-case, upper-case letters and numbers, such as a, Z, 0

  • CONTROL-key followed by one of the above letters

  • escape, horizontal tab, and space keys

  • arrow keys (up, down, left, and right)

  • HOME and END keys

While inside the key configuration menu, an online help is available for each one of the available actions. This help briefly describes what the highlighted action is used for.

Note As of calcurse 3.0.0, displacement commands can be preceded by an optional number to repeat the command. For example, 10k will move the cursor ten weeks forwards if you use default key bindings.

6.3. Color themes

calcurse color theme can be customized to suit user’s needs. To change the default theme, the configuration page displays possible choices for foreground and background colors. Using arrows or calcurse displacement keys to move, and X or space to select a color, user can preview the theme which will be applied. It is possible to keep the terminal’s default colors by selecting the corresponding choice in the list.

The chosen color theme will then be applied to the panel borders, to the titles, to the keystrokes, and to general informations displayed inside status bar. A black and white theme is also available, in order to support non-color terminals.

Note Depending on your terminal type and on the value of the $TERM environment variable, color could or could not be supported. An error message will appear if you try to change colors whereas your terminal does not support this feature. If you do know your terminal supports colors but could not get calcurse to display them, try to set your $TERM variable to another value (such as xterm-xfree86 for instance).

6.4. Layout configuration

The layout corresponds to the position of the panels inside calcurse screen. The default layout makes the calendar panel to be displayed on the top-right corner of the terminal, the todo panel on the bottom-right corner, while the appointment panel is displayed on the left hand-side of the screen (see the figure in section Interactive mode for an example of the default layout). By choosing another layout in the configuration screen, user can customize calcurse appearance to best suit his needs by placing the different panels where needed.

The following option is used to modify the layout configuration:

appearance.layout (default: 0)

Eight different layouts are to be chosen from (see layout configuration screen for the description of the available layouts).

6.5. Sidebar configuration

The sidebar is the part of the screen which contains two panels: the calendar and, depending on the chosen layout, either the todo list or the appointment list.

The following option is used to change the width of the sidebar:

appearance.sidebarwidth (default: 0)

Width (in percentage, 0 being the minimum width) of the side bar.

6.6. Notify-bar settings

The following options are used to modify the notify-bar behavior:

appearance.notifybar (default: yes)

This option indicates if you want the notify-bar to be displayed or not.

format.notifydate (default: %a %F)

With this option, you can specify the format to be used to display the current date inside the notification bar. You can see all of the possible formats by typing man 3 strftime inside a terminal.

format.notifytime (default: %T)

With this option, you can specify the format to be used to display the current time inside the notification bar. You can see all of the possible formats by typing man 3 strftime inside a terminal.

notification.warning (default: 300)

When there is an appointment which is flagged as important within the next notification.warning seconds, the display of that appointment inside the notify-bar starts to blink. Moreover, the command defined by the notification.command option will be launched. That way, the user is warned and knows there will be soon an upcoming appointment.

notification.command (default: printf \a)

This option indicates which command is to be launched when there is an upcoming appointment flagged as important. This command will be passed to the user’s shell which will interpret it. To know what shell must be used, the content of the $SHELL environment variable is used. If this variable is not set, /bin/sh is used instead.

Say the mail command is available on the user’s system, one can use the following command to get notified by mail of an upcoming appointment (the appointment description will also be mentioned in the mail body):

$ calcurse --next | mail -s "[calcurse] upcoming appointment!" user@host.com
notification.notifyall (default: no)

Invert the sense of flagging an appointment as important. If this is enabled, all appointments will be notified - except for flagged ones.

daemon.enable (default: no)

If set to yes, daemon mode will be enabled, meaning calcurse will run into background when the user’s interface is exited. This will allow the notifications to be launched even when the interface is not running. More details can be found in section Background mode.

daemon.log (default: no)

If set to yes, calcurse daemon activity will be logged (see section files).

7. Known bugs

Incorrect highlighting of items appear when using calcurse black and white theme together with a $TERM variable set to xterm-color. To fix this bug, and as advised by Thomas E. Dickey (xterm maintainer), xterm-xfree86 should be used instead of xterm-color to set the $TERM variable:

"The xterm-color value for $TERM is a bad choice for XFree86 xterm because it is commonly used for a terminfo entry which happens to not support bce. Use the xterm-xfree86 entry which is distributed with XFree86 xterm (or the similar one distributed with ncurses)."

8. Reporting bugs and feedback

Please send bug reports and feedback to: misc .at. calcurse .dot. org.

9. How to contribute?

If you would like to contribute to the project, you can first send your feedback on what you like or dislike, and if there are features you miss in calcurse. For now on, possible contributions concern the translation of calcurse messages and documentation.

9.1. Translating documentation

Note We recently dropped all translations of the manual files from the distribution tarball. There are plan to reintroduce them in form of a Wiki on the calcurse website. Please follow the mailing lists for up-to-date information.

The doc/ directory of the source package already contains translated version of calcurse manual. However, if the manual is not yet available into your native language, it would be appreciated if you could help translating it.

To do so, just copy one of the existing manual file to manual_XX.html, where XX identifies your language. Then translate this newly created file and send it to the author (see Reporting bugs and feeback), so that it can be included in the next calcurse release.

9.2. calcurse i18n

As already mentioned, gettext utilities are used by calcurse to produce multi-lingual messages. We are currently using Transifex to manage those translations.

This section provides informations about how to translate those messages into your native language. However, this howto is deliberately incomplete, focusing on working with gettext for calcurse specifically. For more comprehensive informations or to grasp the Big Picture of Native Language Support, you should refer to the GNU gettext manual at: http://www.gnu.org/software/gettext/manual/

Important Since we switched to Transifex, editing po files is not necessary anymore as Transifex provides a user-friendly, intuitive web interface for translators. Knowledge of gettext and the po format is still useful for those of you who prefer the command line and local editing. If you want to use the web UI to edit the translation strings, you can skip over to Using the Transifex web UI tough.

Basically, three different people get involved in the translation chain: coders, language coordinator, and translators. After a quick overview of how things work, the translator tasks will be described hereafter.

9.2.1. Overview

To be able to display texts in the native language of the user, two steps are required: internationalization (i18n) and localization (l10n).

i18n is about making calcurse support multiple languages. It is performed by coders, who will mark translatable texts and provide a way to display them translated at runtime.

l10n is about making the i18n’ed calcurse adapt to the specific language of the user, ie translating the strings previously marked by the developers, and setting the environment correctly for calcurse to use the result of this translation.

So, translatable strings are first marked by the coders within the C source files, then gathered in a template file (calcurse.pot - the pot extension meaning portable object template). The content of this template file is then merged with the translation files for each language (fr.po for French, for instance - with po standing for portable object, ie meant to be read and edited by humans). A given translation team will take this file, translate its strings, and send it back to the developers. At compilation time, a binary version of this file (for efficiency reasons) will be produced (fr.mo - mo stands for machine object, i.e. meant to be read by programs), and then installed. Then calcurse will use this file at runtime, translating the strings according to the locale settings of the user.

9.2.2. Translator tasks

Suppose someone wants to initiate the translation of a new language. Here are the steps to follow:

  • First, find out what the locale name is. For instance, for french, it is fr_FR, or simply fr. This is the value the user will have to put in his LC_ALL environment variable for software to be translated (see Environment variable for i18n).

  • Then, go into the po/ directory, and create a new po-file from the template file using the following command: msginit -i calcurse.pot -o fr.po -l fr --no-translator If you do not have msginit installed on your system, simply copy the calcurse.pot file to fr.po and edit the header by hand.

Now, having this fr.po file, the translator is ready to begin.

9.2.3. po-files

The format of the po-files is quite simple. Indeed, po-files are made of four things:

  1. location lines: tells you where the strings can be seen (name of file and line number), in case you need to see a bit of context.

  2. msgid lines: the strings to translate.

  3. msgstr lines: the translated strings.

  4. lines prefixed with #: comments (some with a special meaning, as we will see below).

Basically, all you have to do is fill the msgstr lines with the translation of the above msgid line.

A few notes:

Fuzzy strings

You will meet strings marked with a "#, fuzzy" comment. calcurse won’t use the translations of such strings until you do something about them. A string being fuzzy means either that the string has already been translated but has since been changed in the sources of the program, or that this is a new string for which gettext made a wild guess for the translation, based on other strings in the file. It means you have to review the translation. Sometimes, the original string has changed just because a typo has been fixed. In this case, you won’t have to change anything. But sometimes, the translation will no longer be accurate and needs to be changed. Once you are done and happy with the translation, just remove the "#, fuzzy" line, and the translation will be used again in calcurse.

c-format strings and special sequences

Some strings have the following comment: "#, c-format". This tells that parts of the string to translate have a special meaning for the program, and that you should leave them alone. For instance, %-sequences, like "%s". These means that calcurse will replace them with another string. So it is important it remains. There are also \-sequences, like \n or \t. Leave them, too. The former represents an end of line, the latter a tabulation.

Translations can be wrapped

If lines are too long, you can just break them like this:

msgid ""
"some very long line"
"another line"
po-file header

At the very beginning of the po-file, the first string form a header, where various kind of information has to be filled in. Most important one is the charset. It should resemble

"Content-Type: text/plain; charset=utf-8\n"

You should also fill in the Last-Translator field, so that potential contributors can contact you if they want to join you in the translation team, or have remarks/typo fixes to give about the translations. You can either just give your name/nick, or add an email address, for exemple:

"Last-Translator: Frederic Culot <frederic@culot.org>\n"
Comments

Adding comments (lines begining with the # character) can be a good way to point out problems or translation difficulties to proofreaders or other members of your team.

Strings size

calcurse is a curses/console program, thus it can be heavily dependant on the terminal size (number of columns). You should think about this when translating. Often, a string must fit into a single line (standard length is 80 characters). Don’t translate blindly, try to look where your string will be displayed to adapt your translation.

A few useful tools

The po-file format is very simple, and the file can be edited with a standard text editor. But if you prefer, there are few specialized tools you may find convenient for translating:

And finally

I hope you’ll have fun contributing to a more internationalized world. :) If you have any more questions, don’t hesitate to contact us at misc .at. calcurse .dot. org.

9.2.4. Uploading to Transifex

There’s several different ways to upload a finished (or semi-finished) translation for a new language to Transifex. The easiest way is to browse to the Translation Teams page and request the addition of a new team.

As soon as we accepted your request, you will be able to upload your po file on the calcurse resource page by clicking the Add translation button at the bottom.

9.2.5. Using transifex-client

You can also use a command line client to submit translations instead of having to use the web interface every time you want to submit an updated version. If you have a recent version of setuptools installed, you can get the CLI client by issuing the following command:

$ easy_install -U transifex-client

Alternatively, you can get the source code of transifex-client at http://pypi.python.org/pypi/transifex-client.

After you downloaded and installed the client, run the following commands in the calcurse source directory to checkout the translation resources of calcurse:

$ tx pull -a

To submit changes back to the server, use:

$ tx push -r calcurse.calcursepot -t -l <locale>

For more details, read up on transifex-client usage at the The Transifex Command-line Client v0.4 section of the Transifex documentation.

9.2.6. Using the Transifex web UI

As an alternative to editing po files, there is a web-based interface that can be used to create and update translations. After having signed up and created a new translation team (see Uploading to Transifex on how to do that), click the Add translation button at the bottom on the calcurse resource page, select the language you’d like to translate and choose Translate Online.

This section contains links and references that may be of interest to you.

10.1. calcurse homepage

The calcurse homepage can be found at http://calcurse.org

10.2. calcurse announce list

If you are interested in the project and want to be warned when a new release comes out, you can subscribe to the calcurse announce list. In doing so, you will receive an email as soon as a new feature appears in calcurse.

To subscribe to this list, send a message to announce+subscribe .at. calcurse .dot. org with "subscribe" in the subject field.

You may want to look at the ical format specification (rfc2445) at: http://tools.ietf.org/html/rfc2445

The pcal project page can be found at: http://pcal.sourceforge.net/

11. Thanks

Its time now to thank other people without whom this program would not exist! So here is a list of contributing persons I would like to thank :

  • Alex for its patches, help and advices with C programming

  • Gwen for testing and general discussions about how to improve calcurse

  • Herbert for packaging calcurse for FreeBSD

  • Zul for packaging calcurse for NetBSD

  • Wain, Steffen and Ronald for packaging calcurse for Archlinux

  • Kevin, Ryan, and fEnIo for packaging calcurse for Debian and Ubuntu

  • Pascal for packaging calcurse for Slackware

  • Alexandre and Markus for packaging calcurse for Mac OsX and Darwin

  • Igor for packaging calcurse for ALT Linux

  • Joel for its calendar script which inspired calcurse calendar view

  • Jeremy Roon for the Dutch translation

  • Frédéric Culot, Toucouch, Erik Saule, Stéphane Aulery and Baptiste Jonglez for the French translation

  • Michael Schulz, Chris M., Benjamin Moeller and Lukas Fleischer for the German translation

  • Rafael Ferreira for the Portuguese (Brazil) translation

  • Aleksey Mechonoshin for the Russian translation

  • Jose Lopez for the Spanish translation

  • Tony for its patch which helped improving the recur_item_inday() function, and for implementing the date format configuration options

  • Erik Saule for its patch implementing the -N, -s, -S, -r and -D flags

  • people who write softwares I like and which inspired me, especially :

    • vim for the displacement keys

    • orpheus and abook for documentation

    • pine and aptitude for the text user interface

    • tmux for coding style

And last, many many thanks to all of the calcurse users who sent me their feedback.


calcurse-4.0.0/doc/export.txt0000644000175000017500000000103412273003161013055 00000000000000Export ====== Export calcurse data (appointments, events and todos). This leads to the export submenu, from which you can choose between two different export formats: 'ical' and 'pcal'. Choosing one of those formats lets you export calcurse data to iCal or pcal format. You first need to specify the file to which the data will be exported. By default, this file is: ~/calcurse.ics for an ical export, and: ~/calcurse.txt for a pcal export. calcurse data are exported in the following order: events, appointments, todos. calcurse-4.0.0/install-sh0000755000175000017500000003452312472330407012252 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: calcurse-4.0.0/INSTALL0000644000175000017500000002243212273003161011264 00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Here is a another example: /bin/bash ./configure CONFIG_SHELL=/bin/bash Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent configuration-related scripts to be executed by `/bin/bash'. `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. calcurse-4.0.0/configure0000755000175000017500000101131112472330411012137 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for calcurse 4.0.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and bugs@calcurse.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='calcurse' PACKAGE_TARNAME='calcurse' PACKAGE_VERSION='4.0.0' PACKAGE_STRING='calcurse 4.0.0' PACKAGE_BUGREPORT='bugs@calcurse.org' PACKAGE_URL='' ac_unique_file="src/calcurse.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS CALCURSE_MEMORY_DEBUG_FALSE CALCURSE_MEMORY_DEBUG_TRUE HAVE_A2X_FALSE HAVE_A2X_TRUE HAVE_ASCIIDOC_FALSE HAVE_ASCIIDOC_TRUE A2X ASCIIDOC ENABLE_DOCS_FALSE ENABLE_DOCS_TRUE EGREP GREP CPP POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MSGMERGE XGETTEXT GMSGFMT MSGFMT USE_NLS MKINSTALLDIRS AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_nls enable_dependency_tracking with_gnu_ld enable_rpath with_libiconv_prefix with_libintl_prefix enable_docs with_asciidoc enable_memory_debug ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures calcurse 4.0.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/calcurse] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of calcurse 4.0.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --disable-nls do not use Native Language Support --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-rpath do not hardcode runtime library paths --disable-docs skip documentation --enable-memory-debug use memory debug functions Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-asciidoc use AsciiDoc to regenerate documentation Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF calcurse configure 4.0.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------- ## ## Report this to bugs@calcurse.org ## ## -------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by calcurse $as_me 4.0.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.15' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='calcurse' VERSION='4.0.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi #m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) MKINSTALLDIRS= if test -n "$ac_aux_dir"; then case "$ac_aux_dir" in /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; esac fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$GMSGFMT" != ":"; then if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5 $as_echo "found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; } GMSGFMT=":" fi fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi rm -f messages.po fi ac_config_commands="$ac_config_commands default-1" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi LIBICONV= LTLIBICONV= INCICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } LIBINTL= LTLIBINTL= POSUB= if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if ${gt_cv_func_gnugettext1_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_gnugettext1_libc=yes else gt_cv_func_gnugettext1_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libc" >&5 $as_echo "$gt_cv_func_gnugettext1_libc" >&6; } if test "$gt_cv_func_gnugettext1_libc" != "yes"; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi LIBINTL= LTLIBINTL= INCINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if ${gt_cv_func_gnugettext1_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (); int main () { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_gnugettext1_libintl=yes else gt_cv_func_gnugettext1_libintl=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (); int main () { bindtextdomain ("", ""); return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext1_libintl=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_gnugettext1_libintl" >&5 $as_echo "$gt_cv_func_gnugettext1_libintl" >&6; } fi if test "$gt_cv_func_gnugettext1_libc" = "yes" \ || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" ac_config_headers="$ac_config_headers config.h" #------------------------------------------------------------------------------- # Checks for system type #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Checks for programs #------------------------------------------------------------------------------- ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi #------------------------------------------------------------------------------- # Checks for header files #------------------------------------------------------------------------------- ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in ctype.h getopt.h locale.h math.h signal.h stdio.h stdlib.h \ string.h sys/stat.h sys/types.h sys/wait.h time.h unistd.h \ fcntl.h paths.h errno.h limits.h regex.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done #------------------------------------------------------------------------------- # Checks for system libs #------------------------------------------------------------------------------- ac_fn_c_check_func "$LINENO" "initscr" "ac_cv_func_initscr" if test "x$ac_cv_func_initscr" = xyes; then : else available_ncurses="none" for lib in ncursesw ncurses do as_ac_Lib=`$as_echo "ac_cv_lib_$lib''_initscr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for initscr in -l$lib" >&5 $as_echo_n "checking for initscr in -l$lib... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char initscr (); int main () { return initscr (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : available_ncurses="$lib"; break fi done if test "$available_ncurses" = none; then as_fn_error $? "Either ncurses or ncursesw library is required to build calcurse!" "$LINENO" 5 elif test "$available_ncurses" = ncursesw; then for ac_header in ncursesw/ncurses.h do : ac_fn_c_check_header_mongrel "$LINENO" "ncursesw/ncurses.h" "ac_cv_header_ncursesw_ncurses_h" "$ac_includes_default" if test "x$ac_cv_header_ncursesw_ncurses_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NCURSESW_NCURSES_H 1 _ACEOF else for ac_header in ncurses.h do : ac_fn_c_check_header_mongrel "$LINENO" "ncurses.h" "ac_cv_header_ncurses_h" "$ac_includes_default" if test "x$ac_cv_header_ncurses_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NCURSES_H 1 _ACEOF else as_fn_error $? "Missing ncursesw header file" "$LINENO" 5 fi done fi done else for ac_header in ncurses/ncurses.h do : ac_fn_c_check_header_mongrel "$LINENO" "ncurses/ncurses.h" "ac_cv_header_ncurses_ncurses_h" "$ac_includes_default" if test "x$ac_cv_header_ncurses_ncurses_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NCURSES_NCURSES_H 1 _ACEOF else for ac_header in ncurses.h do : ac_fn_c_check_header_mongrel "$LINENO" "ncurses.h" "ac_cv_header_ncurses_h" "$ac_includes_default" if test "x$ac_cv_header_ncurses_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NCURSES_H 1 _ACEOF else as_fn_error $? "Missing ncurses header file" "$LINENO" 5 fi done fi done fi LIBS="$LIBS -l$available_ncurses" fi for ac_header in pthread.h do : ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTHREAD_H 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 $as_echo_n "checking for pthread_create in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_create+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_create (); int main () { return pthread_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_create=yes else ac_cv_lib_pthread_pthread_create=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 $as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : LIBS="$LIBS -pthread" $as_echo "#define HAVE_LIBPTHREAD 1" >>confdefs.h else as_fn_error $? "The pthread library is required in order to build calcurse!" "$LINENO" 5 fi else as_fn_error $? "The pthread header is required in order to build calcurse!" "$LINENO" 5 fi done for ac_header in math.h do : ac_fn_c_check_header_mongrel "$LINENO" "math.h" "ac_cv_header_math_h" "$ac_includes_default" if test "x$ac_cv_header_math_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MATH_H 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for exp in -lm" >&5 $as_echo_n "checking for exp in -lm... " >&6; } if ${ac_cv_lib_m_exp+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char exp (); int main () { return exp (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_exp=yes else ac_cv_lib_m_exp=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_exp" >&5 $as_echo "$ac_cv_lib_m_exp" >&6; } if test "x$ac_cv_lib_m_exp" = xyes; then : LIBS="$LIBS -lm" $as_echo "#define HAVE_LIBMATH 1" >>confdefs.h else as_fn_error $? "The math library is required in order to build calcurse!" "$LINENO" 5 fi else as_fn_error $? "The math header is required in order to build calcurse!" "$LINENO" 5 fi done #------------------------------------------------------------------------------- # Check whether to build documentation #------------------------------------------------------------------------------- # Check whether --enable-docs was given. if test "${enable_docs+set}" = set; then : enableval=$enable_docs; enabledocs=$enableval else enabledocs=yes fi if test x"$enabledocs" != x"yes"; then enabledocs=no { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Skipping documentation!" >&5 $as_echo "$as_me: WARNING: Skipping documentation!" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include documentation" >&5 $as_echo_n "checking whether to include documentation... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enabledocs" >&5 $as_echo "$enabledocs" >&6; } if test x"$enabledocs" = x"yes"; then ENABLE_DOCS_TRUE= ENABLE_DOCS_FALSE='#' else ENABLE_DOCS_TRUE='#' ENABLE_DOCS_FALSE= fi # Check whether --with-asciidoc was given. if test "${with_asciidoc+set}" = set; then : withval=$with_asciidoc; use_asciidoc=$withval else use_asciidoc="auto" fi if test x"$use_asciidoc" = x"auto"; then # Extract the first word of "asciidoc", so it can be a program name with args. set dummy asciidoc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ASCIIDOC+:} false; then : $as_echo_n "(cached) " >&6 else case $ASCIIDOC in [\\/]* | ?:[\\/]*) ac_cv_path_ASCIIDOC="$ASCIIDOC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ASCIIDOC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ASCIIDOC=$ac_cv_path_ASCIIDOC if test -n "$ASCIIDOC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ASCIIDOC" >&5 $as_echo "$ASCIIDOC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$ASCIIDOC"; then have_asciidoc=no { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: AsciiDoc not found - cannot rebuild documentation!" >&5 $as_echo "$as_me: WARNING: AsciiDoc not found - cannot rebuild documentation!" >&2;} else have_asciidoc=yes fi # Extract the first word of "a2x", so it can be a program name with args. set dummy a2x; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_A2X+:} false; then : $as_echo_n "(cached) " >&6 else case $A2X in [\\/]* | ?:[\\/]*) ac_cv_path_A2X="$A2X" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_A2X="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi A2X=$ac_cv_path_A2X if test -n "$A2X"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $A2X" >&5 $as_echo "$A2X" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$A2X"; then have_a2x=no { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: a2x not found - cannot rebuild man pages!" >&5 $as_echo "$as_me: WARNING: a2x not found - cannot rebuild man pages!" >&2;} else have_a2x=yes fi elif test x"$use_asciidoc" = x"yes"; then # Extract the first word of "asciidoc", so it can be a program name with args. set dummy asciidoc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ASCIIDOC+:} false; then : $as_echo_n "(cached) " >&6 else case $ASCIIDOC in [\\/]* | ?:[\\/]*) ac_cv_path_ASCIIDOC="$ASCIIDOC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ASCIIDOC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ASCIIDOC=$ac_cv_path_ASCIIDOC if test -n "$ASCIIDOC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ASCIIDOC" >&5 $as_echo "$ASCIIDOC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$ASCIIDOC"; then as_fn_error $? "AsciiDoc not found and \"--with-asciidoc\" specified!" "$LINENO" 5 fi # Extract the first word of "a2x", so it can be a program name with args. set dummy a2x; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_A2X+:} false; then : $as_echo_n "(cached) " >&6 else case $A2X in [\\/]* | ?:[\\/]*) ac_cv_path_A2X="$A2X" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_A2X="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi A2X=$ac_cv_path_A2X if test -n "$A2X"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $A2X" >&5 $as_echo "$A2X" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$A2X"; then as_fn_error $? "a2x not found and \"--with-asciidoc\" specified!" "$LINENO" 5 fi have_asciidoc=yes elif test x"$use_asciidoc" = x"no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Will not rebuild documentation!" >&5 $as_echo "$as_me: WARNING: Will not rebuild documentation!" >&2;} have_asciidoc=no have_a2x=no fi if test $have_asciidoc = yes; then HAVE_ASCIIDOC_TRUE= HAVE_ASCIIDOC_FALSE='#' else HAVE_ASCIIDOC_TRUE='#' HAVE_ASCIIDOC_FALSE= fi if test $have_a2x = yes; then HAVE_A2X_TRUE= HAVE_A2X_FALSE='#' else HAVE_A2X_TRUE='#' HAVE_A2X_FALSE= fi #------------------------------------------------------------------------------- # Compilation options #------------------------------------------------------------------------------- CFLAGS="$CFLAGS -Wall" # Check whether --enable-memory_debug was given. if test "${enable_memory_debug+set}" = set; then : enableval=$enable_memory_debug; memdebug=$enableval fi if test "$memdebug" != "yes"; then memdebug=no $as_echo "#define CALCURSE_MEMORY_DEBUG_DISABLED 1" >>confdefs.h else $as_echo "#define CALCURSE_MEMORY_DEBUG 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if memory debug should be used" >&5 $as_echo_n "checking if memory debug should be used... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $memdebug" >&5 $as_echo "$memdebug" >&6; } if test x$memdebug = xyes; then CALCURSE_MEMORY_DEBUG_TRUE= CALCURSE_MEMORY_DEBUG_FALSE='#' else CALCURSE_MEMORY_DEBUG_TRUE='#' CALCURSE_MEMORY_DEBUG_FALSE= fi #------------------------------------------------------------------------------- # Create Makefiles #------------------------------------------------------------------------------- ac_config_files="$ac_config_files Makefile doc/Makefile src/Makefile test/Makefile scripts/Makefile po/Makefile.in po/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_DOCS_TRUE}" && test -z "${ENABLE_DOCS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_DOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_ASCIIDOC_TRUE}" && test -z "${HAVE_ASCIIDOC_FALSE}"; then as_fn_error $? "conditional \"HAVE_ASCIIDOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_A2X_TRUE}" && test -z "${HAVE_A2X_FALSE}"; then as_fn_error $? "conditional \"HAVE_A2X\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CALCURSE_MEMORY_DEBUG_TRUE}" && test -z "${CALCURSE_MEMORY_DEBUG_FALSE}"; then as_fn_error $? "conditional \"CALCURSE_MEMORY_DEBUG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by calcurse $as_me 4.0.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ calcurse config.status 4.0.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "po/Makefile") CONFIG_FILES="$CONFIG_FILES po/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "default-1":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi #------------------------------------------------------------------------------- # Summary #------------------------------------------------------------------------------- echo echo "========================================================================" echo "$PACKAGE is configured as follows." echo "Please check that this configuration matches your expectations." echo "Also give a look at the config.h file to check for preprocessor symbols." echo echo "Host system type : $host" echo echo "Options used to compile and link:" echo " PREFIX = $prefix" echo " VERSION = $PACKAGE_VERSION" echo " CC = $CC" echo " CFLAGS = $CFLAGS" echo " CPPFLAGS = $CPPFLAGS" echo " DEFS = $DEFS" echo " LD = $LD" echo " LDFLAGS = $LDFLAGS" echo " LIBS = $LIBS" echo "========================================================================" echo