AUTHORS | 2 ++ configure.ac | 1 - po/ru.po | 4 +-- src/common/ssl.c | 4 ++- src/common/utils.c | 1 + src/gtk/authors.h | 1 + src/mimeview.c | 4 +-- src/plugins/litehtml_viewer/litehtml/html.h | 1 + src/plugins/litehtml_viewer/litehtml/num_cvt.h | 1 + src/procheader.c | 6 ++-- src/procheader.h | 4 +-- src/textview.c | 8 ++--- tools/filter_conv.pl | 1 + tools/fix_date.sh | 13 +++++--- tools/kdeservicemenu/install.sh | 18 ++++++----- tools/mairix.sh | 12 ++++++-- tools/make.themes.project | 10 ++++-- tools/tb2claws-mail | 2 +- tools/textviewer.pl | 2 ++ tools/textviewer.sh | 42 +++++++++++++++----------- tools/uudec | 15 ++++++++- tools/uuooffice | 10 ++++-- 22 files changed, 110 insertions(+), 52 deletions(-) diff --git a/AUTHORS b/AUTHORS index 25d698c04..6a0178974 100644 --- a/AUTHORS +++ b/AUTHORS @@ -340,3 +340,5 @@ contributors (in addition to the above; based on Changelog) Ramin Yaghoubzadeh Torky Manuel Stoeckl Frank Mueller + JP Guillonneau + Viatrix diff --git a/configure.ac b/configure.ac index f0fe8f235..00f2b64a3 100644 --- a/configure.ac +++ b/configure.ac @@ -832,7 +832,6 @@ if test x"$enable_alternate_addressbook" = xno; then dnl check for available libraries, and pull them in AC_CHECK_LIB(resolv, res_query, LDAP_LIBS="$LDAP_LIBS -lresolv") AC_CHECK_LIB(socket, bind, LDAP_LIBS="$LDAP_LIBS -lsocket") - AC_CHECK_LIB(nsl, gethostbyaddr, LDAP_LIBS="$LDAP_LIBS -lnsl") AC_CHECK_LIB(lber, ber_get_tag, LDAP_LIBS="$LDAP_LIBS -llber",, $LDAP_LIBS) diff --git a/po/ru.po b/po/ru.po index f99977d02..f143fb1bf 100644 --- a/po/ru.po +++ b/po/ru.po @@ -4641,7 +4641,7 @@ msgstr "Коричневый" #: src/gtk/colorlabel.c:45 src/prefs_common.c:392 msgid "Grey" -msgstr "Зеленый" +msgstr "Серый" #: src/gtk/colorlabel.c:46 src/prefs_common.c:396 msgid "Light brown" @@ -17460,7 +17460,7 @@ msgstr "Вид сообщения" #: src/prefs_msg_colors.c:152 msgid "Enable coloration of message text" -msgstr "Включить окраску теста сообщения" +msgstr "Включить окраску текста сообщения" #: src/prefs_msg_colors.c:160 msgid "Quote" diff --git a/src/common/ssl.c b/src/common/ssl.c index 1eafe3f6e..7cea09a9c 100644 --- a/src/common/ssl.c +++ b/src/common/ssl.c @@ -195,8 +195,9 @@ const gchar *claws_ssl_get_cert_file(void) { #ifndef G_OS_WIN32 const char *cert_files[]={ - "/etc/ssl/cert.pem", "/etc/pki/tls/certs/ca-bundle.crt", + "/usr/share/ca-certificates/ca-bundle.crt", + "/etc/ssl/cert.pem", "/etc/certs/ca-bundle.crt", "/etc/ssl/ca-bundle.pem", "/usr/share/ssl/certs/ca-bundle.crt", @@ -231,6 +232,7 @@ const gchar *claws_ssl_get_cert_dir(void) return g_getenv("SSL_CERT_DIR"); #ifndef G_OS_WIN32 const char *cert_dirs[]={ + "/var/lib/ssl/certs", "/etc/pki/tls/certs", "/etc/certs", "/usr/share/ssl/certs", diff --git a/src/common/utils.c b/src/common/utils.c index 497bedfca..396a65eff 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -608,6 +608,7 @@ gchar *escape_internal_quotes(gchar *str, gchar quote_chr) if (str == NULL || *str == '\0') return str; + g_strstrip(str); /* search for unescaped quote_chr */ p = str; if (*p == quote_chr) diff --git a/src/gtk/authors.h b/src/gtk/authors.h index 100c60895..125d307e3 100644 --- a/src/gtk/authors.h +++ b/src/gtk/authors.h @@ -317,6 +317,7 @@ static char *CONTRIBS_LIST[] = { "Aleksandar Urošević", "Petr Vanek", "Jeroen Versteeg", +"Viatrix", "Kevin Vigor", "Michael Vilain", "Johan Vromans", diff --git a/src/mimeview.c b/src/mimeview.c index e782dce76..ef12ed8f5 100644 --- a/src/mimeview.c +++ b/src/mimeview.c @@ -1,6 +1,6 @@ /* * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 1999-2022 the Claws Mail team and Hiroyuki Yamamoto + * Copyright (C) 1999-2023 the Claws Mail team and Hiroyuki Yamamoto * * 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 @@ -1669,7 +1669,7 @@ static void mimeview_drag_data_get(GtkWidget *widget, fp = claws_fopen(partinfo->data.filename, "rb"); if (fp != NULL && fseek(fp, partinfo->offset, SEEK_SET) == 0) { - headers = procheader_get_header_array_asis(fp); + headers = procheader_get_header_array(fp); if (headers) { gint i; for (i = 0; i < headers->len; i++) { diff --git a/src/plugins/litehtml_viewer/litehtml/html.h b/src/plugins/litehtml_viewer/litehtml/html.h index 4151b1225..20457f155 100644 --- a/src/plugins/litehtml_viewer/litehtml/html.h +++ b/src/plugins/litehtml_viewer/litehtml/html.h @@ -9,6 +9,7 @@ #include #include #include +#include #include "os_types.h" #include "types.h" #include "background.h" diff --git a/src/plugins/litehtml_viewer/litehtml/num_cvt.h b/src/plugins/litehtml_viewer/litehtml/num_cvt.h index 515e46d62..367dcc36a 100644 --- a/src/plugins/litehtml_viewer/litehtml/num_cvt.h +++ b/src/plugins/litehtml_viewer/litehtml/num_cvt.h @@ -2,6 +2,7 @@ #define NUM_CVT_H #include +#include #include "os_types.h" namespace litehtml diff --git a/src/procheader.c b/src/procheader.c index 106deadec..220a808a9 100644 --- a/src/procheader.c +++ b/src/procheader.c @@ -1,6 +1,6 @@ /* * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 1999-2014 Hiroyuki Yamamoto and the Claws Mail team + * Copyright (C) 1999-2023 the Claws Mail team and Hiroyuki Yamamoto * * 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 @@ -265,7 +265,7 @@ gint procheader_get_one_field_asis(gchar **buf, FILE *fp) FALSE); } -GPtrArray *procheader_get_header_array_asis(FILE *fp) +GPtrArray *procheader_get_header_array(FILE *fp) { gchar *buf = NULL; GPtrArray *headers; @@ -275,7 +275,7 @@ GPtrArray *procheader_get_header_array_asis(FILE *fp) headers = g_ptr_array_new(); - while (procheader_get_one_field_asis(&buf, fp) != -1) { + while (procheader_get_one_field(&buf, fp, NULL) != -1) { if ((header = procheader_parse_header(buf)) != NULL) g_ptr_array_add(headers, header); g_free(buf); diff --git a/src/procheader.h b/src/procheader.h index 3e5681946..a5c3201d0 100644 --- a/src/procheader.h +++ b/src/procheader.h @@ -1,6 +1,6 @@ /* * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 1999-2014 Hiroyuki Yamamoto and the Claws Mail team + * Copyright (C) 1999-2023 the Claws Mail team and Hiroyuki Yamamoto * * 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 @@ -47,7 +47,7 @@ gint procheader_get_one_field (gchar **buf, gint procheader_get_one_field_asis (gchar **buf, FILE *fp); -GPtrArray *procheader_get_header_array_asis (FILE *fp); +GPtrArray *procheader_get_header_array (FILE *fp); void procheader_header_array_destroy (GPtrArray *harray); void procheader_header_free (Header *header); diff --git a/src/textview.c b/src/textview.c index b986de84e..0e7b3ae18 100644 --- a/src/textview.c +++ b/src/textview.c @@ -1,6 +1,6 @@ /* * Claws Mail -- a GTK based, lightweight, and fast e-mail client - * Copyright (C) 1999-2022 the Claws Mail team and Hiroyuki Yamamoto + * Copyright (C) 1999-2023 the Claws Mail team and Hiroyuki Yamamoto * * 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 @@ -1926,7 +1926,7 @@ static GPtrArray *textview_scan_header(TextView *textview, FILE *fp) cm_return_val_if_fail(fp != NULL, NULL); if (prefs_common.show_all_headers) { - headers = procheader_get_header_array_asis(fp); + headers = procheader_get_header_array(fp); sorted_headers = g_ptr_array_new(); for (i = 0; i < headers->len; i++) { header = g_ptr_array_index(headers, i); @@ -1945,7 +1945,7 @@ static GPtrArray *textview_scan_header(TextView *textview, FILE *fp) return NULL; } - headers = procheader_get_header_array_asis(fp); + headers = procheader_get_header_array(fp); sorted_headers = g_ptr_array_new(); @@ -1956,7 +1956,6 @@ static GPtrArray *textview_scan_header(TextView *textview, FILE *fp) for (i = 0; i < headers->len; i++) { header = g_ptr_array_index(headers, i); - if (procheader_headername_equal(header->name, dp->name)) { if (dp->hidden) @@ -1973,6 +1972,7 @@ static GPtrArray *textview_scan_header(TextView *textview, FILE *fp) if (prefs_common.show_other_header) { for (i = 0; i < headers->len; i++) { header = g_ptr_array_index(headers, i); + unfold_line(header->body); if (!procheader_header_is_internal(header->name)) { g_ptr_array_add(sorted_headers, header); } else { diff --git a/tools/filter_conv.pl b/tools/filter_conv.pl index fec94e819..894e3621e 100755 --- a/tools/filter_conv.pl +++ b/tools/filter_conv.pl @@ -158,6 +158,7 @@ close(FILTERRC); ############################################################################### +chdir($ENV{ HOME } . "/.claws-mail") or die("You don't appear to have Sylpheed Claws installed\n"); open(MATCHERRC, ">>matcherrc"); print MATCHERRC @new_filters; close(MATCHERRC); diff --git a/tools/fix_date.sh b/tools/fix_date.sh index 379807d68..1c5beedf6 100755 --- a/tools/fix_date.sh +++ b/tools/fix_date.sh @@ -28,8 +28,8 @@ # TODO: fallback to X-OriginalArrivalTime: ? -VERSION="0.1.4" - +VERSION="0.1.3" +DOS2UNIX=dos2unix version() { @@ -114,7 +114,12 @@ fi test $# -lt 1 && \ usage 1 -for PROG in dos2unix grep sed +if ! type "$DOS2UNIX" >/dev/null 2>&1; then + echo "error: $DOS2UNIX command not found, please install it" + exit 1 +fi + +for PROG in "$DOS2UNIX" grep sed do type "$PROG" >/dev/null 2>&1 || \ { echo "error: $PROG not found in PATH"; exit 1; } @@ -152,7 +157,7 @@ do # find the empty line that separates body (if any) from headers, # work on a temporary dos2unix'ed copy because body might # contain DOS CRLF and grep '^$' won't work - head -$MAX_HEADER_LINES "$1" | dos2unix > "$TMP" + head -$MAX_HEADER_LINES "$1" | "$DOS2UNIX" > "$TMP" SEP=`grep -nEm1 "^$" "$TMP" 2>/dev/null | cut -d ':' -f 1` rm -f "$TMP" if [ -z "$SEP" -o "$SEP" = "0" -o $? -ne 0 ] diff --git a/tools/kdeservicemenu/install.sh b/tools/kdeservicemenu/install.sh index e3560ebde..ad21f47e8 100755 --- a/tools/kdeservicemenu/install.sh +++ b/tools/kdeservicemenu/install.sh @@ -2,6 +2,8 @@ PERL_SCRIPT="claws-mail-kdeservicemenu.pl" DESKTOP="claws-mail-attach-files.desktop" +KDESU=kdesu +KDIALOG=kdialog function check_environ { echo "Checking for kde4-config..." @@ -21,7 +23,7 @@ else else echo "kde-config not found..." echo "asking user to find kde4-config or kde-config..." - KDECONFIG=$(kdialog --title "Locate kde-config or kde4-config" --getopenfilename / ) + KDECONFIG=$("$KDIALOG" --title "Locate kde-config or kde4-config" --getopenfilename / ) test -z $KDECONFIG && exit 1 if [[ $KDECONFIG == *4-config ]]; then SERVICEMENU_DIR="share/kde4/services/ServiceMenus" @@ -42,7 +44,7 @@ echo "Installing $PREFIX/$SERVICEMENU_DIR/$DESKTOP" mv -f $DESKTOP $PREFIX/$SERVICEMENU_DIR/$DESKTOP if [[ $? -ne 0 ]] then - kdialog --error "Could not complete installation." + "$KDIALOG" --error "Could not complete installation." exit fi echo "Installing $PREFIX/bin/$PERL_SCRIPT" @@ -51,7 +53,7 @@ echo "Setting permissions ..." chmod 0644 $PREFIX/$SERVICEMENU_DIR/$DESKTOP chmod 0755 $PREFIX/bin/$PERL_SCRIPT echo "Finished installation." -kdialog --msgbox "Finished installation." +"$KDIALOG" --msgbox "Finished installation." } function uninstall_all { @@ -59,13 +61,13 @@ echo "Removing $PREFIX/$SERVICEMENU_DIR/$DESKTOP" rm $PREFIX/$SERVICEMENU_DIR/$DESKTOP if [[ $? -ne 0 ]] then - kdialog --error "Could not complete uninstall." + "$KDIALOG" --error "Could not complete uninstall." exit fi echo "Removing $PREFIX/bin/$PERL_SCRIPT" rm $PREFIX/bin/$PERL_SCRIPT echo "Finished uninstall." -kdialog --msgbox "Finished uninstall." +"$KDIALOG" --msgbox "Finished uninstall." } function show_help { @@ -80,7 +82,7 @@ function show_help { } if [ -z $1 ] - then option="--$(kdialog --menu "Please select installation type" \ + then option="--$("$KDIALOG" --menu "Please select installation type" \ local "install for you only" \ global "install for all users" \ uninstall-local "uninstall for you only" \ @@ -94,7 +96,7 @@ case $option in PREFIX=$($KDECONFIG --prefix) echo "Installing in $PREFIX/$SERVICEMENU_DIR ..." if [ "$(id -u)" != "0" ]; then - exec kdesu "$0 --global" + exec "$KDESU" "$0 --global" fi install_all ;; @@ -115,7 +117,7 @@ case $option in PREFIX=$($KDECONFIG --prefix) echo "Uninstalling from $PREFIX/$SERVICEMENU_DIR ..." if [ "$(id -u)" != "0" ]; then - exec kdesu "$0 --uninstall-global" + exec "$KDESU" "$0 --uninstall-global" fi uninstall_all ;; diff --git a/tools/mairix.sh b/tools/mairix.sh index b44fd3595..ce743c08f 100755 --- a/tools/mairix.sh +++ b/tools/mairix.sh @@ -21,6 +21,8 @@ # if any param is passed, $1 must be the mairixrc file to use # if no param is passed, ~/.mairixrc is assumed +MAIRIX=mairix + read TEXT test -z "$TEXT" && \ exit 0 @@ -33,6 +35,12 @@ else RCFILE=~/.mairixrc fi -mairix -f "$RCFILE" --purge && \ - mairix -f "$RCFILE" "$@" $TEXT + +which "$MAIRIX" > /dev/null 2>&1 || +{ + echo "Please install '$MAIRIX' to use this script." >&2 + exit 1 +}; +$MAIRIX -f "$RCFILE" --purge && \ + $MAIRIX -f "$RCFILE" "$@" $TEXT exit $? diff --git a/tools/make.themes.project b/tools/make.themes.project index 038bad760..68a3955d2 100644 --- a/tools/make.themes.project +++ b/tools/make.themes.project @@ -21,6 +21,12 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # +WGET=wget +if ! type "$WGET" > /dev/null 2>&1; then + echo "Please install 'wget' to use this script." >&2 + exit 1 +fi + test x$1 = x && echo "Error: version number not given" && exit 1; VERS=$1 @@ -35,7 +41,7 @@ WLOG=themes.wget.log function getListFromPage() { test -f ${PAGE} && rm -f ${PAGE}; - wget -q -a ${WLOG} ${SITE}/${PAGE} + $WGET -q -a ${WLOG} ${SITE}/${PAGE} test ! -f ${PAGE} && echo "Error: couldn't get ${PAGE}." && exit 1; grep 'download.php?file=' ${PAGE} \ @@ -58,7 +64,7 @@ function downloadThemes() test $tarf = "png" \ && tarf=`echo $theme | cut -f3 -d/ `; echo -n "Downloading... "; - wget -q -a ${WLOG} -O ${DDIR}/$tarf ${SITE}/$theme + $WGET -q -a ${WLOG} -O ${DDIR}/$tarf ${SITE}/$theme test ! -f ${DDIR}/$tarf && echo "Error: couldn't get $tarf" && exit 1; pushd ${DDIR} > /dev/null tarops=""; diff --git a/tools/tb2claws-mail b/tools/tb2claws-mail index 70300610a..d2971ba71 100755 --- a/tools/tb2claws-mail +++ b/tools/tb2claws-mail @@ -53,7 +53,7 @@ closedir(CLAWS); # get all existing addressbook filenames foreach $cached (@cached) { if ($cached =~ m/^addrbook/ && $cached =~ m/[0-9].xml$/) { - push(addr, "$cached"); + push(@addr, "$cached"); } } # sort filenames, get last and set newest filename diff --git a/tools/textviewer.pl b/tools/textviewer.pl index e9f04ae05..8945e84bb 100755 --- a/tools/textviewer.pl +++ b/tools/textviewer.pl @@ -96,6 +96,8 @@ my %fh = ( bz2 => [ "bzip2 -d < %f | strings" ], + gz => [ "zcat %f | strings" ], + zip => [ "unzip -l %f" ], # ZIP test => [ \&test ], # Internal diff --git a/tools/textviewer.sh b/tools/textviewer.sh index 38c889431..4fa6ce06c 100755 --- a/tools/textviewer.sh +++ b/tools/textviewer.sh @@ -87,6 +87,14 @@ # ############################################################################### +ANTIWORD=antiword +PDFTOTEXT=pdftotext +OOO2TXT=ooo2txt +XLHTML=xlhtml +HTML2TEXT=html2text +PPTHTML=ppthtml +UNRTF=unrtf + if [ $# -eq 0 ] then echo "No filename supplied." >&2 @@ -172,72 +180,72 @@ case $TYPE in ZIP) echo -e "Zip file contents:\n" ; unzip -l "$1" ;; - RTF) which unrtf > /dev/null 2>&1 || + RTF) which "$UNRTF" > /dev/null 2>&1 || { echo "Program 'unrtf' for displaying RTF files not found" >&2 exit 1 }; echo -e "Displaying \"$1\" using \"unrtf\":\n"; - unrtf -t text "$1" 2>/dev/null | egrep -v '^### ' | fold -s -w 72 ;; + "$UNRTF" -t text "$1" 2>/dev/null | grep -E -v '^### ' | fold -s -w 72 ;; - TEXT) cat "$1" ;; + TEXT) cat "$1" | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g";; - MSWORD) which antiword > /dev/null 2>&1 || + MSWORD) which "$ANTIWORD" > /dev/null 2>&1 || { echo "Program 'antiword' for displaying MS Word files not found" >&2 exit 1 }; echo -e "Displaying \"$1\" using \"antiword\":\n"; - antiword -w 72 "$1" ;; + "$ANTIWORD" -w 72 "$1" ;; - POWERPOINT) which ppthtml > /dev/null 2>&1 || + POWERPOINT) which "$PPTHTML" > /dev/null 2>&1 || { echo "Program 'ppthtml' for displaying Powerpoint files not found" >&2 exit 1 }; - which html2text > /dev/null 2>&1 || + which "$HTML2TEXT" > /dev/null 2>&1 || { echo "Program 'html2text' for displaying Powerpoint files not found" >&2 exit 1 }; echo -e "Displaying \"$1\" using \"ppthtml\" and \"html2text\":\n"; - ppthtml "$1" | html2text ;; + "$PPTHTML" "$1" | "$HTML2TEXT" ;; - EXCEL) which xlhtml > /dev/null 2>&1 || + EXCEL) which "$XLHTML" > /dev/null 2>&1 || { echo "Program 'xlhtml' for displaying Excel files not found" >&2 exit 1 }; - which html2text > /dev/null 2>&1 || + which "$HTML2TEXT" > /dev/null 2>&1 || { echo "Program 'html2text' for displaying Excel files not found" >&2 exit 1 }; echo -e "Displaying \"$1\" using \"xlhtml\" and \"html2text\":\n"; - xlhtml "$1" | html2text ;; + "$XLHTML" "$1" | "$HTML2TEXT" ;; - OOWRITER) which ooo2txt > /dev/null 2>&1 || + OOWRITER) which "$OOO2TXT" > /dev/null 2>&1 || { echo "Program 'ooo2txt' for converting OpenOffice Writer files not files not found" >&2 exit 1 }; echo -e "Displaying \"$1\" using \"ooo2txt\":\n"; - ooo2txt "$1" ;; + "$OOO2TXT" "$1" ;; - PDF) which pdftotext > /dev/null 2>&1 || + PDF) which "$PDFTOTEXT" > /dev/null 2>&1 || { echo "Program 'pdftotext' for converting Adobe Portable Document Format to text not found" >&2 exit 1 }; echo -e "Displaying \"$1\" using \"pdftotext\":\n"; - pdftotext "$1" - ;; + "$PDFTOTEXT" "$1" - ;; - HTML) which html2text > /dev/null 2>&1 || + HTML) which "$HTML2TEXT" > /dev/null 2>&1 || { echo "Program 'html2text' for converting HTML files not found" >&2 exit 1 }; - html2text -nobs "$1" ;; + "$HTML2TEXT" -nobs "$1" ;; *) echo "Unsupported file type \"$FILETYPE\", cannot display.";; esac diff --git a/tools/uudec b/tools/uudec index 9b106bb21..664f4057f 100755 --- a/tools/uudec +++ b/tools/uudec @@ -1,2 +1,15 @@ #!/bin/sh -uudecode -o - "$1" | display - +UUDECODE=uudecode +DISPLAY_CMD=display + +if ! type "$UUDECODE" > /dev/null 2>&1; then + echo "Please install 'uudecode' to use this script." >&2 + exit 1 +fi + +if ! type "$DISPLAY_CMD" > /dev/null 2>&1; then + echo "Please install 'display' to use this script." >&2 + exit 1 +fi + +$UUDECODE -o - "$1" | $DISPLAY_CMD - diff --git a/tools/uuooffice b/tools/uuooffice index 6a5dc060c..e0b5517de 100755 --- a/tools/uuooffice +++ b/tools/uuooffice @@ -18,8 +18,14 @@ # # uuooffice helper script to open documents attached to emails with OpenOffice +OOFFICE=ooffice +UUDECODE=uudecode FILENAME=$(grep -Em 1 "^begin [0-7][0-7][0-7] ." "$1" | cut -d ' ' -f 3-) TMPFILE=/tmp/${0##*/}_$FILENAME -uudecode -o - "$1" > "$TMPFILE" -ooffice "$TMPFILE" +which "$UUDECODE" > /dev/null 2>&1 && + $UUDECODE -o - "$1" > "$TMPFILE" || + echo "Please install 'uudecode' to use this script." >&2 +[ -e "$TMPFILE" ] && which "$OOFFICE" > /dev/null 2>&1 && + $OOFFICE "$TMPFILE" || + echo "Please install 'ooffice' to use this script." >&2 rm -f "$TMPFILE"